传送门 题面保证数据随机,所以乱搞就好 直接忽略选取任意一个的条件,最短路记录前驱 ……然后就做完了吗? 当出现类似 \(n=1e5, m=2e5\) 的时候数组尤其容易开小,应该开 \(4e5\) 而不是 \(2e5\) 写暴力的时候注意memset整个数组可能就T了 Code: #include <bits/stdc++.h> using na
Day 1 1 直接枚举可行性方案, 复杂度 O(2^n) 2 考虑按照 C 为关键字排序, 于是问题变成了求 1 ~ i 区间内可能数组的个数, 再按位考虑,由于每一位都是独立的, 于是可以拆开计算, 最后再 * 到一块, 操作变为区间一 异或 0 / 1, 可以差分, 再将 l 和 r + 1 连边, 会形成若干个联通块, 每个连
题目链接 题目链接 题意 重排数组,使得相邻两数之差绝对值的最小值尽可能大。\(n\leq 10^5\) 题解 排序,为了方便表述考虑连边。如果某条边的跨度不足 \(\lfloor \dfrac{n}{2}\rfloor\),我们可以通过调整覆盖它的某条边(变为交叉)来使答案不减。因此我们要连边使得每条边跨度都有 \(\lf
无向图三元环计数 从度数小的点向度数大的点连边,若度数相同则将编号小的向编号大的连边。 可以证明复杂度是 \(O(m\sqrt{m})\) 。 有向图三元环计数 将所有边看成无相,按照有向图的方式找出所有三元环,再进行检查是否在原图上也构成三元环。 竞赛图三元环计数 \(\dbinom{n}{3}-\sum_
主要内容 \(\operatorname{2~-~SAT}\),简单的说就是给出 \(n\) 个集合,每个集合有两个元素,已知若干个 \(<a,b>\) ,表示 \(a\) 与 \(b\) 矛盾(其中 \(a\) 与 \(b\) 属于不同的集合)。然后从每个集合选择一个元素,判断能否一共选 \(n\) 个两两不矛盾的元素。显然可能有多种选择方案,一般题
D2. Mocha and Diana (Hard Version) https://codeforces.com/contest/1559/problem/D2 题目大意 给出两个图,现在可以进行一个操作,就是选出两个点 \(x,y\),并且在两个图中给 \(x,y\)之间连一条边,这两个点必须满足连边之前不在同一个联通块内。询问你最多可以连多少条边? 解题思路
参考[luogu7417],同样求出最短路,得到二元组$(x,y)$并排序,记$tot_{(x,y)}$为$(x,y)$的数量 其中所给的两个条件,即分别要求: 1.$(x,y)$只能和$(x\pm 1,y\pm 1)$连边 2.每一个$(x,y)$都向$(x-1,y\pm 1)$中的一个连边、$(x\pm 1,y-1)$中的一个连边 (另外,注意在$x+1=y$时$(x+1,y-1)$也即为
这是 CF1559 D1 & D2 的题解。 先来看看 Easy Version。数据范围:\(1\le n\le 10^3\)。 结论:最终态的两片森林中至少有一片是一棵树。 证明: 当第一片森林中只有一棵树时,原命题成立。 于是设第一片森林中至少有两棵树。设其中两棵分别为 \(A\) 和 \(B\),那么 \(\forall a\in A,b\in
线段树优化建图适用于对一段区间内的点进行连边,如果暴力连边,复杂度是 \(O(n^2m)\) 的,显然过大。 考虑支持各种区间操作的线段树。建立两棵线段树,第一棵树从父亲向儿子连边权为0的边,这里称为出树,第二棵树从儿子向父亲连边权为0的边这里称为入树,它们的叶子节点是相同的,为题目里给出
前言 今天我打开考试题目一看,发现四道考试题甚至看不出来是什么算法。 于是我听大佬说,这个题啊,是线段树优化建图板子题。很毒瘤的,不搞线段树优化建图就会爆\(0\)。 我害怕极了,自从我打暴力的水平提高,模拟退火用得越发熟练,玄学预估答案越发准确,我就没爆\(0\)过了。(至少有20分吧 所
这次是搬的联想杯的题,(确实要好一些) link solution A:考虑x,y大小关系分别模拟即可 B:模拟 C:模拟 D:由于fib性质每条边存(max,min)按顺序比较做mst即可 E:不同排列间连边最短路即可,编号用康拓展开求 F:咕咕咕 G:单调栈维护一下即可 H:行列维护最晚时间 I:没仔细看题解,大概首先有很多
题目:从集合S中取出M对数,使得“每对数的差的平方和最大”, 做法: Step1:从S中选最小的M个数,再从S中选最大的M个数, 记这2M个数分别为\(a_1,a_2,\cdots,a_{2m-1},a_{2m}(a_1<a_2<\cdots<a_{2m-1}<a_{2m})\) Step2:最大值与最小值配对,次大值与次小值配对,次次大值与次次小值配对...... 那
最小割构图 二分图中,用最小割表示变量之间的关系。 下面用\(x\rightarrow y\)表示条件x满足则条件y满足。 同时令\(x_l\)表示\(x\)是一个左边的点,\(x_r\)表示右边的点。 1. \(x_l\rightarrow !y_r,y_r\rightarrow !x_l\) 直接连边\(x_l\)到\(y_r\),边权为\(\infty\)。 2.\(x_l\or y
题意简述 一张n个点的图,连边方式为区间[a, b]中每一个点向区间[c, d]中每一个点连带权无向边,求可使k条边权值变为0的最短路(其中起点为1,终点为n) n \(\leq\) 50000, 连边次数m \(\leq\) 10000, K \(\leq\) 10, 边权w \(\leq\) 1000 分析 如果暴力连边的话,即使m = 1也需要连 1e9 次,根
题面传送门 如果没有x就是2-SAT裸题。 具体的,如果当前\(x\)不满足,直接跳过,如果\(y\)不满足,那么连边如果\(x=nx\)满足,那么\(x=nx^1\)满足。其它就正常连边。 然而这题有x。 考虑到x的数量很少,我们可以直接爆搜每个x是\(a\)还是\(b\)还是\(c\),但是这样不优。 发现其实\(a\)与\(b\)就
点此看题面 给定一棵\(n\)个点的仙人掌。 初始每个点自成一个点集,所有点颜色都为\(1\),你可以进行三种操作:合并两个点\(x,y\)所在的点集;在点集\(x\)中\(a,b\)两种颜色的点之间两两连边;把点集\(x\)中所有颜色为\(a\)的点的颜色修改为\(b\)。 \(n\le5\times10^4\) 圆方树 遇上仙人
考场上我坚持认为这是个组合数题。。。 看到\(k\leq8\)我想状压来着,但是不知道怎么压 实际上,对于点i和点j的连边(\(j\in[i-k, i-1]\))只有连或不连两种状态 而如果i与比j编号小的点连边的情况已经考虑完了,方案数就可以连带下来,如此就可以建立转移 令\(dp[i][j][s][l]\)为在点i,连了j
题目 题目链接:https://codeforces.com/contest/117/problem/C 给定一张竞赛图,求任意一个大小为 \(3\) 的环。 \(n\leq 5000\)。 思路 给出一种非常简洁的做法。 考虑对于一个点 \(x\),我们能找到两个点 \(y,z\),满足它们之间的连边如下: 那么 \(x\to z\) 这条边一定是没用的,也就是如
题目大意 给出一个由 \(n\)个数的排列, 逆序对之间连边 的方式构造出来的无向图, 求图中既是独立集又是覆盖集的点集的个数. 形式化的, 若\(i<j, p_i > p_j\), 则在图中连一条边\((i,j)\). \(n <= 1000\). 解题思路 不难想到把图转化为序列上来做. 那么图中的边集转化成了序列上的
传送门 显然时间相交的货物不能在一个栈中,在其间连边,求的是二分图染色数。 考虑优化连边,按照右端点排序。 每次需要与左端点在 \((a_i,b_i)\) 内的货物连边,也就是染成相同颜色,然后将 \(a_i\) 在左端点集合中删去。 任意时刻,集合中同色的货物的左端点是连续的一段。 连边时,已经同色
传送门 题目描述: 有一个 m 行 n 列的方格图,每个方格中都有一个正整数。现要从方格中取数,使任意两个数所在方格没有公共边,且取出的数的总和最大,请求出最大的和。 思路:把棋盘通过纵横坐标和(i+j)的奇偶性拆成黑色和白色的点,然后选择黑色/白色的点与源点连边,权值为点权,白色/
用途 如果某个无向连通图的任意一条边至多只出现在一条简单回路里,我们就称这张图为仙人掌图。 所谓简单回路就是指在图上不重复经过任何一个顶点的回路。 在某些情况下,我们会需要生成仙人掌图来检验代码的正确性。 随机连边的话效率太低,而且生成的图也可能不合法。 看上去似乎不大
AGC034 D - Manhattan Max Matching 可以发现曼哈顿距离 \(|x_1 - x_2| + |y_1 - y_2| = max(x_1 - x_2 + y_1 - y-2, x_1 - x_2 - y_1 + y_2, -x_1 + x_2 + y_1 - y_2, -x_1 + x_2 - y_1 + y_2)\), 也就是合法即最大. 所以可以建四个点分别对应四种选择方案, 然后分别与红蓝点两
最近在牛客和cf上面一连做到了两道类似的题目,是关于最短路算法优化问题的。 https://ac.nowcoder.com/acm/contest/6885/E 题目大意: 给定 个点,第 个点有权值 。如果对于 有 不为 ,那么 间有无向边,边权为 。问从 到 的最短路。 首先暴力连边的做法肯定是不行的,由于题目条
2-SAT,表示为一系列约束 \(x_i\; or\; x_j\) 即两个变量中至少选择一个为真。 那么,假如其中一个选择了假,另一个一定要选择为真。 拆点,把变量 \(x_i\) 取真用点 \(V_i\) 表示,变量 \(x_i\) 取假用点 \(V_{i+n}\) 表示。那么上面的一个约束就连边:\((V_{i+n},V_j\) 和 \((V_{j+n},V_i\)