一道簡單的並查集題目hdoj1212
#include<iostream>
using namespace std;
int T,N,M;
int father[2000];
void initial(int n){ //初始化數組
for(int i=1;i<=n;i++)
father[i] = i;
}
int find(int x){ //查找函數
if(father[x] == x) return x;
return father[x] = find(father[x]);
}
void UNION(int x,int y){ //合併
int fx = find(x);
int fy = find(y);
if(fx!=fy){
N--;
father[fy] = fx;
}
}
int main(){
int i,a,b;
cin>>T;
while(T--){
cin>>N>>M;
initial(N);
for(i=0;i<M;i++){
cin>>a>>b;
UNION(a,b);
}
cout<<N<<endl;
}
return 0;
}