这道题在网上有一些用并查集来写的题解,但是好像是不对的。
他们的具体做法是合并的时候让值小的数的 vis 等于 1 ,这种写法可以通过,但是这样的写法过不了下面这组数据:
4
1 2
2 3
3 1
4 1
答案是 4 ,那种做法的输出是 3 。
假设要将 x,y 合并,其中 x 更小且 visx=1,visy=0,(等价于 x 所在联通块有环,y 所在的没有),合并后的这个联通块显然也有环,但是根节点 y 上还有 visy=0,所以这个算法就寄了。
这一篇(不是洛谷上的题解) 寄了。
这一篇 也寄了。
这一篇(是洛谷上的) 大概也寄了,但是因为他没贴代码,我也不好判断。
正确的并查集写法应该是记录联通块内的边数和点数。
(如果是我想错了,轻喷)