CF1916F:Group Division 题解
F:
题意:给出一张无重边的无向图,保证图是一个点双连通分量(没有割点),让你把所有点划分成两个点集,保证各个点集的导出子图连通。
本来想的是怎么找到一个大环,但是想想好像点双不一定有大环(“日”中间加个点就没大环了),就放弃了。
Solution:
有没有O(n)的做法呢?完全没思路。但是这题是n方,所以可以先尝试乱搞。
题目让划分成两个集合,那我们先往一个集合里放一个点,然后慢慢加点扩充这个集合。我们不断加点的集合设为S,另一个设成T,那么我们每次从T里抢一个点加给S。
加点的规则需要满足两个:1.新点和S子图连通。2.新点不是T子图的割点,否则T就裂开了!
这里简单猜个结论:无论何时,这样的新点一定存在。而且复杂度也没问题,因为是n方所以我们可以求任意时刻T子图的割点。
发现结论成立,那么这题直接做完了,谔谔,一个点一个点往S里加就好了。
简单证明一下结论:可以反证,我们把T中的点分成T1和T2,T1是割点,T2是其他点。假设S只和T1有连边,那么一定可以切掉某个T1中的点,使得T2的一部分和S不再相连,而且那一部分和T的其他点也不相连,那这个点不就成了全局割点了吗,根据题意假设不成立。所以S和T2肯定有连边,每次新点在T2里选就好。