最简单的并查集。。。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int pre[1200];
int mark[1300];
int find(int x){
return pre[x]==x?x:find(pre[x]);
}
int main(){
int T;
int n,m;
int a,b,i,j,k,t;
scanf("%d",&T);
while(T--){
memset(pre,0,sizeof(pre));
memset(mark,0,sizeof(mark));
scanf("%d%d",&n,&m);
int fx,fy;
for(i=0;i<=n;i++){
pre[i]=i;
mark[i]=i;
}
int sum=n;
for(i=0;i<m;i++){
scanf("%d %d",&a,&b);
fx=find(a);
fy=find(b);
if(fx!=fy){
sum-=1;
pre[fx]=fy;
}
}
printf("%d\n",sum);
}
return 0;
}