标签:并查集
#include<bits/stdc++.h>
using namespace std;
const int _max = 1e5 + 10;
int a,b,pre[_max],ans;
void init(){//每个点所在的集合初始化为自身
for(int i = 1;i <= _max;++ i) pre[i] = i;
}
int find(int x){//查找,返回元素x的根节点
return pre[x] == x? x : pre[x]=find(pre[x]);
}
void join(int a,int b){//合并
int x = find(a),y = find(b);
if(x != y) pre[x] = y;
else ans++; //加上(a,b)则成环,会发生爆炸booooom!
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
while(scanf("%d",&a) == 1){
init();
ans = 0;
while(a != -1){
scanf("%d",&b);
join(a,b);
scanf("%d",&a);
}
printf("%d\n",ans);
}
return 0;
}
Ctrl + B
Ctrl + I
Ctrl + Q
Ctrl + L
Ctrl + K
Ctrl + G
Ctrl + H
Ctrl + O
Ctrl + U
Ctrl + R
Ctrl + Z
Ctrl + Y
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:并查集
原文地址:http://blog.csdn.net/u012717411/article/details/47975365