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

 

转载于:https://www.cnblogs.com/hewenny/p/5503176.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值