集训内容总结 day1:图论
内容:⽹络流的建模与优化;2-SAT;点、边双连通性;双极定向;欧拉回路。
双连通分量
边双连通分量
CF555E Case of Computer Network
问是否存在给无向图定向的方式使得钦定的起点和终点两两可达。\(n,m,|S|,|T|\le 2\times 10^5\)
对于一个边双内部都可达。剩下一棵树,对其定向即可。
QOJ5437 Graph Completing
给一个简单无向连通图,求多少种加边方案使得图无重边且为边双连通分量。\(n\le 5\times 10^3\)
先缩边双,边双内随意连,外部的树需要被若干边覆盖。
直接不好做,考虑容斥。即钦定 \(i\) 条边未被覆盖(割边),容斥系数是 \(-1\)。记 \(f_{i,j}\) 表示 \(i\) 子树内边双大小为 \(j\) 的答案,合并时讨论这条边是否要选即可。
点双连通分量和圆方树
P8456 地地铁铁
给你无向图,边有黑白色。计数有多少个点对满足存在一个简单路径使得路径上既有白点也有黑点。\(n\le 4\times 10^5,m\le 10^6\)
缩点双建圆方树。考虑点双内部的点对,如果全同色则不合法。不然发现全部合法,除了存在连接不同色的边的点恰有两个时,这两个点的答案是不合法的。
对于不同点双的点对,发现若路径上存在混色点双则一定合法。容易在圆方树上 dp 得到答案。
P7353 Tom & Jerry
Alice 和 Bob 在图上玩游戏,Alice 先手。每次 Alice 可以移动若干步,但不能经过 Bob 所在点。Bob 可以移动一步,问 Bob 是否能在有限步内抓住 Alice。\(n,m\le 10^5\)
Bob 可以逼着 Alice 往某个连通块内走。建出圆方树,则 Bob 每次可以走到子方点的儿子中与当前点有连边的点。Alice 一开始可以跑到子树内的任意点,因此 Bob 必须能到达子树内的所有点。
Bob 同时还有另一种选择:先走到某个点,然后这个点是必胜的。因此使用换根 dp 即可。
强连通分量
QOJ8824 Slay the Spire
有 \(n\) 张牌,你初始在 \(s\) 上。每张牌的效果是,如果你在 \(a_i\) 上可以获得 \(w_i\) 收益,然后不管你在哪里你都会被传送到到 \(b_i\)。每张牌最多打一次,问最大收益。\(n\le 10^5\)
参考自:https://qoj.ac/blog/qingyu/blog/912
先假设所有牌都被打出了,相当于图上要存在一条欧拉路。我们可以支付一定的权值选择打出某张牌时在其它点上,相当于支付一定价值传送至某点。考虑每个起点至少有 \(\max(0,出边数-入边数-是某些牌的终点数)\) 条边会需要支付。对边排序贪心做即可。
当一个强连通分量没有入边时还需支付额外的价格进入这个分量,同时少支付一条连出去边的代价。
NOI2024D2T3 树形图
感性理解了!这里搬一篇题解区的:https://www.luogu.com.cn/article/t5bvxvdp
欧拉路和欧拉回路
CF2110E Melody
有 \(n\) 个二元组 \((a_i,b_i)\),你要对其排序使得相邻两个二元组 \(a\) 相同或 \(b\) 相同,且不存在相邻三个二元组 \(a\) 相同或 \(b\) 相同。\(n\le 2\times 10^5\)
把声音看成连接二分图两侧的边,发现欧拉路就是答案。
QOJ5434 Binary Substrings
构造一个长度为 \(n\) 的 01 串使得本质不同子串最多。\(n\le 2\times 10^5\)。
理论上界是,最大的 \(k\) 满足 \(2^k+k-1\le n\),即所有不同的长度为为 \(k\) 的串都在 \(n\) 中出现过,且长度更大的串均互不相同。
相当于在图上找一条路径满足每个点至少被经过一次,每个边至多被经过一次。
构造是直接看一个状态后能接到哪个状态。找到一个哈密顿回路,删去上面的边后形成若干个连通块,发现每个连通块最后剩下一个环(起点是一个路径)。这样就能绕两次了。
2-SAT
P9139 喵了个喵 II
给定一个长为 \(4n\) 的序列,其中 \(1\sim n\) 各出现 \(4\) 次。问是否能够将其划分为两个相等的子序列。\(n\le 5\times 10^4\)。
只出现两次怎么做:记数的出现位置为 \((l_i,r_i)\),如果存在包含关系则倒闭,否则有解。
考虑变成四次:\((a_i,b_i,c_i,d_i)\) 有两种分配方式:\((a_i,b_i)+(c_i,d_i)\) 和 \((a_i,c_i)+(b_i,d_i)\)。
把所有矛盾通过主席树建出来。然后跑 2-SAT 即可。
双极定向
双极定向即为:问是否能给无向连通图定向使得其变为 DAG 且存在唯一入度为零的点 \(s\) 和唯一出度为零的点 \(t\)。
结论:若图缩点后所有点双在一条链上即存在答案。
同时定向的过程等价于图初始为白色,不断选一些点染成黑色要求黑白色块分别连通。
如果有圆方树上某个方点不在其它方点的链上,则考虑三个方点中间的圆点进行染色。因此方点只能在链上。
P9394 白鹭兰
有一个一开始全白的图,每次可以选择一个集合染成黑色,要求过程中黑白色块分别连通且 \(t\) 次操作后满足所有点均为黑色。最小化最大的集合的大小。
\(k=1\) 就是双极定向。否则相当于将一些点合并,然后生成的圆方树是链。等价于将原图圆方树中删去链上的方点。即最小化剩下点的连通块的大小最大值。
考虑树形 dp,先枚举起始点 lca,每次一定拎出子树内最大的点递归进去。
网络流
最大流
Dinic 复杂度上界是 \(O(n^2m)\) 的。
单位容量复杂度为 \(O(m\min(m^{\frac12},n^{\frac23}))\)。
EK 是 \(O(nm^2)\) 的。有时能够 bitset 优化。
P2764 最小路径覆盖问题
求一个图的最小路径覆盖。即路径两两不交,且路径的并为所有点。
从初始每个点都是一个路径开始合并。拆点分成入点和出点,最大化其匹配即可。
CF1630F Making It Bipartite
点有点权,两点间有边当且仅当两点点权为倍数关系。问至少删去多少点使得图变成二分图。
如果存在三个点有倍数关系就倒闭了。所以一个点不能既有出度又有入度。拆点,对矛盾点连边,这样就是求最大独立集。
但是可以定向成偏序集,就变成求图的最长反链等于最小链覆盖(即上一题)。
最小割
最小割等于最大流。
AGC038F Two Permutations
给定两个排列 \(P,Q\)。要求构造两个排列 \(A,B\) 满足条件:\(A_i\) 等于 \(i\) 或 \(P_i\),\(B_i\) 等于 \(i\) 或 \(Q_i\)。最大化 \(A_i\neq B_i\) 的 \(i\) 的数量。\(n\le 10^5\)
对于 \(P,Q\) 分别找出其置换环。一个置换环要么保留(\(A_i=P_i\)),要么全拆掉(\(A_i=i\))。
对 \(i,P_i,Q_i\) 三者的相等关系分类讨论。构建二分图表示置换环的状态。\(P\) 被拆分在左侧,\(Q\) 被拆分在右侧,这样就可以表示 \(P,Q\) 选择状态不同时的贡献。跑最小割即可,单位边权,时间复杂度 \(O(n\sqrt n)\)。
P3227 切糕
每个点连出去一个链(矩形为二分图)。然后对于一组矛盾,连边表示矛盾即可。注意矩形相邻的点的连边方式需要反过来。
ARC176E Max Vector
给定两个长度为 \(N\) 的序列 \(X,Y\) 和 \(M\) 个长度为 \(N\) 的序列 \(A_{i,j}\)。依次对 \(i\in[1,M]\) 进行如下两种操作:将 \(X_j\) 替换为 \(\max(X_j, A_{i,j})\) 或将 \(Y_j\) 替换为 \(\max(Y_j, A_{i,j})\)。最小化最终 \(X,Y\) 所有元素之和。
对 \(X_i,Y_i\) 建 \(V 个点表示取值,和上题类似,\)Y$ 的图要反过来。再建一些虚拟点表示操作,若虚拟点选择某个操作就会对 \(X_i,Y_i\) 的割的位置产生限制。
CF786E ALT
给一棵树和一些路径,可以花费 \(1\) 的代价选择一条树上的边或选择一个路径,路径合法当且仅当自己被选择或对应的所有边都被选择。问使得所有路径合法的最小代价。
把路径和边选不选都丢到图上。路径如果不选则要让对应的边全选,直接数据结构连边即可。
Hall 定理
左部点为 \(S\),右部点为 \(T\),则二分图存在完备匹配的充要条件是所有左部点的子集连向右部点的点的并大于左部点数量。必要性容易得出。
QOJ12015 撸猫
二分 \(c\) 然后二分图一侧是 \(n\) 只猫,每只猫需要 \(c\cdot p_i\) 的概率,另一侧是每个状态,能贡献出 \(p_S\) 的值。然后套 Hall 定理判定即可。
一个模拟赛题
有长度为 \(n\) 的序列,初始为 \(0\)。有两种操作:\(x_i\) 加一和 \(x_i,x_{i+1}\) 选择一个加一,最多只能分别操作 \(a_i,b_i\) 次。\(q\) 次询问 \([l,r]\) 经过若干次操作后最小值最大可能为多少。\(n,q\le 10^5\)
二分值,一边是所有的值减去 \(a_i\),另一边是 \(b\) 的贡献。考虑 Hall 定理选子集和这个东西,发现选连通块合不合法不如选单个区间更严,就变成最大子段和了。
然后变成 P5073 世上最幸福的女孩。询问整体二分。
费用流
最短路单调不降,费用流是凸的。
AGC031E Snuke the Phantom Thief
二维平面上有一些有点权的点,有一些限制表示横 / 纵坐标小于 / 大于 \(x_i\) 的部分最多只能选 \(b_i\) 个点。问满足限制情况下选出点的点权最大为多少。
枚举总点数,变成横/纵坐标第 \(i\) 小的点必须大于或小于某个值。然后就可以得知特定排名的点的取值范围。变成给一个点分配横纵坐标的排名,使得权值最大。
AGC034D Manhattan Max Matching
二维平面上有一些蓝色和红色的球。找出一组蓝红球的匹配使得所有对的曼哈顿距离之和最大。
把 \(|x|\) 拆成 \(\max(x,-x)\)。设立中转点,其他点向中转点连边即可。由于网络流求的是最大值因此绝对值的情况一定会被取到。
上下界网络流
GYM103855I Marbles
有一些黑色或白色的集合(一开始每个集合内有一个点),你有若干次操作:
- 合并两个集合
- 从某个集合中删去一个点
- 观测到某个集合中黑色点数量在 \([l,r]\) 内。
你要对一开始的这些点染色,满足观测操作的限制。
没有 2 操作就是直接考虑树结构上边的流量限制。加入 2 操作,考虑从叶子连一条反向的边即可。