题目链接:http://acm.hdu.edu.cn/submit.php?pid=1232
裸的并查集
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int binchaji[2001];
int n,m;
int x,y;
int findx(int x){
int r=x;
while(binchaji[r]!=r) r=binchaji[r];
return r;
}
void init(int x,int y){
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy) binchaji[fx]=fy;
}
void solve(){
for(int i=1;i<=n;i++)
binchaji[i]=i;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
init(x,y);
}
}
int main(){
while(scanf("%d%d",&n,&m)&&n){
solve();
int count=0;
for(int i=1;i<=n;i++)
if(binchaji[i]==i) count++;
printf("%d\n",count-1);
}
return 0;
}