OJ题目:click here~~
并查集入门题。
const int maxn = 200008 ;
int n , m ;
int fa[maxn] ;
void init(){
for(int i = 0;i <= n;i++) fa[i] = i ;
}
int father(int x){
if(x == fa[x]) return x ;
else return fa[x] = father(fa[x]) ;
}
void Merg(int x , int y){
int fx = father(x) ;
int fy = father(y) ;
if(fx != fy){
fa[fy] = fx ;
}
}
int main(){
while(scanf("%d",&n)){
if(n == 0) break ;
init() ;
int x , y ;
scanf("%d",&m) ;
while(m--){
scanf("%d%d",&x, &y) ;
Merg(x , y) ;
}
set<int> ans ;
ans.clear() ;
for(int i = 1;i <= n;i++){
ans.insert(father(i)) ;
}
printf("%d\n",ans.size()) ;
}
return 0 ;
}