LA 3644并查集,图的联通分量

元素看成顶点,化合物看成一条边。用并查集维护图的联通分量。对于每个新增的化合物(x, y),如果x和y在同一个联通分量里,则加入边(x,y)使得联通分量形成环,从而危险。

代码如下:

 1 #include <cstdio>
 2 const int maxn=1e6;
 3 int pa[maxn];
 4 int find(int x){return pa[x] != x ? pa[x]=find(pa[x]) : pa[x];}
 5 int main(){
 6     int x, y;
 7     while(scanf("%d",&x)==1){
 8         for(int i=0;i<maxn;i++){pa[i] = i;}
 9         int refusals = 0;
10         while (x != -1){
11             scanf("%d",&y);
12             x = find(x);y = find(y);
13             if (x==y) refusals++;//x and y have been in the same compent, then adding(x,y) will cause a cycle
14             else pa[x] = y;
15             scanf("%d",&x);
16         }
17     printf("%d\n",refusals);
18     }
19     return 0;
20 }
View Code

 

posted @ 2016-05-17 21:06  banana16314  阅读(146)  评论(0编辑  收藏  举报