cf1555f-solution

CF1555F Solution

link

分析一张图中的环,我们可以考虑把图表示为一棵生成树加上许多非树边。

对于这题,我们考虑动态维护一片森林,在每次准备加一条边 \((u,v)\) 时:

  • 如果这条边加进去后与森林不形成环,那么它与图肯定也不形成环,那么直接加进森林中。

  • 如果这条边是森林的一条非树边,那么考虑什么时候我们可以加进森林中。

首先,根据题意,\(w_{(u,v)}\) 异或树上链 \(u,v\) 的异或和得是 \(1\)

然而加进 \((u,v)\) 不仅会与树形成环,它可能会与其他非树边形成环。

考虑下图。

graph

这里 \((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,链加,链推平和链求和。

时间复杂度线性对数。

posted @ 2024-02-28 13:38  iorit  阅读(16)  评论(0)    收藏  举报