#include <stdio.h> #include <string.h> #define MAXN 1100 int parent[MAXN]; int n,m; void UFset(){ for(int i=1;i<=n;++i) parent[i]=-1; } int Find(int x){ int s; for(s=x;parent[s]>=0;s=parent[s]) ; while(s!=x){ int tmp=parent[x]; parent[x]=s; x=tmp; } return s; } void Union(int R1,int R2){ int r1=Find(R1),r2=Find(R2); int tmp=parent[r1]+parent[r2]; if(parent[r1]>parent[r2]){ parent[r1]=r2; parent[r2]=tmp; } else{ parent[r2]=r1; parent[r1]=tmp; } } int main(){ int t; int i,j; int t1,t2; int sign[1100]; int res; while(~scanf("%d",&t)){ while(t--){ res=0; memset(sign,0,sizeof(sign)); scanf("%d%d",&n,&m); UFset(); while(m--){ scanf("%d%d",&t1,&t2); if(Find(t1)!=Find(t2)){ Union(t1,t2); } } for(i=1;i<=n;++i){ if(parent[i]<0){ res++; } } printf("%d ",res); } } return 0; }