题目:详见啊哈算法P200页。就是并查集的裸题。
分析:裸题呀,理解并背下代码。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int f[1000]={0},n,m,k,sum;
int getf(int x){
if(f[x]==x) return x ;
else{
return f[x] = getf(f[x]);
}
}
void merge(int x , int y){
int tx ,ty ;
tx = getf(x);
ty = getf(y);
if(tx!=ty){
f[ty] = tx;
}
return ;
}
int main(){
freopen("in.txt","r",stdin);
int x , y ;
while(scanf("%d %d",&n,&m)!=EOF){
sum = 0 ;
for(int i = 1 ; i <= n ; i++) f[i] = i ;
for(int i = 1 ; i <= m ; i ++){
scanf("%d %d",&x,&y);
merge(x,y);
}
for(int i = 1 ; i <= n ; i++){
if(f[i]==i) sum ++;
}
printf("%d\n",sum);
}
return 0 ;
}