#include<iostream> #include<stdio.h> #include<cstring> using namespace std; const int maxn = 1010; int father[maxn],vis[maxn]; int Find(int x){ while(x != father[x]){ father[x] = father[father[x]]; x = father[x]; } return x; } void Union(int a,int b){ int ax = Find(a); int bx = Find(b); if(ax != bx){ father[ax] = bx; } // if(a != b) // father[a] = b; //這個錯的太傻逼了吧 } int main(){ int T; scanf("%d",&T); int a,b; while(T--){ int n,m; scanf("%d%d",&n,&m); memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++) father[i] = i; for(int i = 0; i < m; i++){ scanf("%d%d",&a,&b); Union(a,b); } int sum = 0; for(int i = 1; i <= n; i++){ if(father[i] == i) sum++; } cout<<sum<<endl; } return 0; }