CF1916F

首先看到这题的题意里的点双连通分量就能大致知道跟 Tarjan 算法有关了。
考虑接近倍增的思想,设立两个集合 \(S_1,S_2\)
一开始 \(S_1\) 中只有一个点(可以选任意一点),\(S_2\) 里有剩下的$\ \ n_1+n_2-1\ \ $个点。
然后大致做法就是从 \(S_2\) 中选出与 \(S_1\) 中的任意点有连边的点,直到 \(S_1\) 的点数等于 $ n_1$。
但是题目里还说了:\(S_1,S_2\) 的导出子图均连通。
所以还有一个要求那就是选出的点不能为 \(S_2\) 中的割点,不然就会破坏 \(S_2\) 的连通性。
能够证明这样的点一定存在:

考虑 \(S_2\) 中的割点,找到 \(S_2\) 中只与一个割点 \(x\) 相邻的一块,如果这个块与 \(S_1\) 没有边相连,则 \(x\) 是原图的的一个割点,这与题设是矛盾的。
综上所述,我们可以先确定一个点作为 \(S_1\) 的起始点,接着使用 Tarjan 找到 \(S_2\) 里的割点,然后把其他点一个个丢进 \(S_1\) 里就可以了。
代码鸽了/hsh。

posted @ 2025-08-14 20:52  zhuoheng  阅读(4)  评论(0)    收藏  举报