并查集求最小环
例题: 洛谷信息传递 求最小环是2015年NOIP的一道题,作为蒟蒻的我并不会这道题,看了题解之后做个笔记吧! 要求最小环我们得找出所有的环,找环的办法就是读入i的父亲之后,判断他俩是否现在已经连上了,如果已经连上了,那么就构成了一个环,此时就不需要再将他们两个连上了,不然就会死循环,这时估计就有人会问,不连上他们,那么如果有包含这一条边的环比你现在的环还小你不就错了么?(这就是这题的图的特殊了,因为对于每一个点只会有一个父亲,按照我们的遍历方式来看,所以此时 i 和 i的父亲 的父亲都已经知道了,那么就不可能再会有别的环经过这条边了),当然,如果此时父亲不同就把i并入 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 #include<cstring> 5 #include<climits> 6 using namespace std; 7 int fa[200010]; 8 int res=INT_MAX; 9 int cnt=0; 10 int find(int x) 11 { 12 cnt++; 13 if(fa[x]==x) 14 return fa[x]; 15 else 16 return find(fa[x]); 17 } 18 int main() 19 { 20 int n; 21