CF1555F Solution
分析一张图中的环,我们可以考虑把图表示为一棵生成树加上许多非树边。
对于这题,我们考虑动态维护一片森林,在每次准备加一条边 \((u,v)\) 时:
-
如果这条边加进去后与森林不形成环,那么它与图肯定也不形成环,那么直接加进森林中。
-
如果这条边是森林的一条非树边,那么考虑什么时候我们可以加进森林中。
首先,根据题意,\(w_{(u,v)}\) 异或树上链 \(u,v\) 的异或和得是 \(1\)。
然而加进 \((u,v)\) 不仅会与树形成环,它可能会与其他非树边形成环。
考虑下图。
这里 \((u,v),(x,y)\) 和树边形成了一个环。
你发现这里一共有三个环:
-
\(u\to root\to v\cdots\mathbf I\)
-
\(x\to root\to y\cdots\mathbf{II}\)
-
\(x\to u\to v \to y\cdots\mathbf{III}\)
现在我们知道环 \(\mathbf I\) 和环 \(\mathbf{II}\) 的异或和都是 \(1\)。
但是你发现环 \(\mathbf{III}\) 的异或和是 \(\mathbf I\) 和 \(\mathbf{II}\) 的异或,等于 \(0\)。
这与题设矛盾。于是我们就得到了一个重要结论:图中不能存在相交的两个环。
那么就好办了,每次加非树边时检查一下树上 \(u,v\) 链上是否有标记,没有的话给链打上标记,否则就无法加边。
至于如何动态维护森林,用 LCT 即可,支持 link,链加,链推平和链求和。
时间复杂度线性对数。
标签:mathbf,cdots,solution,II,异或,cf1555f,非树边,森林 From: https://www.cnblogs.com/iorit/p/18040108