图论-突突突突突 (Mar, 2019)
owo
[BZOJ 3681] Arietta
持久化,每次新建节点,避免影响之前的树。
[AGC 006 F] Blackout
统计每个弱连通分量,三个颜色染色之后把点重新编号,每个点为起点的边都可以用一个数字 \(v\) 表示,意义是按照 \(0,1,2\) 的顺序,边的终点在位置 \(v\) 。这样每个点都对应了一个集合。初始时,集合存在 \(1\) 。如果有 \(x,y\) ,就有 \(f(x,y)=-x-y\) 。其实能够直接推得的东西仅仅是:另外一个点的集合里面有 \(-x-y\) ,不过很多点的集合都相同,大部分情况下,自己的集合也会有这个东西。
以下构造只使用 \(1,-2\) ,这样结论可以适用于更多的点。
\(x \rightarrow f(x,1)=-x-1 \rightarrow f(-x-1,-2)=x+3\) ,所以 \(1+3k\) \((k \ge 0)\) 存在。
\(f(1,1+3k)=-2-3k\) ,所以 \(-2-3k\) \((k \ge 0)\) 存在。整合起来, \(S=\{1+3t| t \in N\}\) 。
因此,如果染色成功,初始集合只有 \(1\) ,答案是 \(cnt_0cnt_1+cnt_1cnt_2+cnt_2cnt_0\) 。不过一分图和二分图的时候,没有集合存在 \(-2\) ,此时什么也构造不出来,需要特判。
如果染色失败,说明存在下面两种情况中的一种,它们可能会使得集合存在更多的元素:
元素 \(0\) 就非常好,因为有 \(0\) 说明每个数都能用来构造它的相反数了,答案就是 \(cnt^2\) 。
第一种: \(2+3t \in S\)
\(t \ge 0\) , \(f(2+3t,-2)=-3t \rightarrow f(-3t, 1)=3t-1\rightarrow f(3t-1,-2)=-3t+3 \rightarrow \cdots\) ,可以构造 \(0\) 。
\(t <0\) , \(f(2+3t,1)=-3t-3 \rightarrow \cdots\) 可以构造 \(0\) 。
第二种: \(3t \in S\)
\(t \ge 0\) , \(f(3t,-2)=-3t+2 \rightarrow f(-3t+2,1)=3t-3 \rightarrow \cdots\) ,可以构造 \(0\) 。
\(t < 0\) , \(f(3t,1)=-3t-1 \rightarrow f(-3t-1,-2)=3t+3 \rightarrow \cdots\) ,可以构造 \(0\) 。
[ARC 080 F]
类似 LED 那道题的差分,假设已经知道 \(dis\) ,直接费用流不可取,但是的确又需要匹配。
计算 \(dis\) ,背包不行,通过哥德巴赫猜想可以得到(特殊数字 \(1=5+7-11,2=5-3\) ):
偶数 \(dis\) 是 \(2\) 。
奇数,如果是素数 \(dis\) 就是 \(1\) ,否则是 \(3\) 。
然后匹配,通过分析,贪心选费用 \(1\) 的点对匹配是正确的,最坏情况 \(1+3\le 2+2\) ,仍然是最优的 。
所以先把费用是 \(1\) 的点,奇偶性建图,跑二分图匹配。剩下的偶数和偶数匹配,奇数和奇数匹配,费用 \(2\) 。如果还有剩余,肯定剩一对 \(dis\) 是奇数且是合数,费用 \(3\) 。最坏情况 \(2+3\le 3+3\) ,仍然是最优的。