#include<cstdio>using namespace std;int parent(int p[],int r){ int t=r; while(r!=p[r])//寻找父节点 r=p[r]; while(t!=r) //更新父节点 { t=p[t]; p[t]=r; } return r;}int main(){ int n,m,f,t,p[100001]; while(scanf("%d",&n)!=EOF && n ) { scanf("%d",&m); for(int i=1;i<=n;++i) //初始化父节点 p[i]=i; while(m--) { scanf("%d%d",&f,&t); if(n>1) { int pf=parent(p,f); int pt=parent(p,t); if(pf!=pt) //判断父节点 { --n; p[pf]=pt; } } } printf("%d\n",n); } return 0;}/************************************************************** Problem: 1526 User: 3011216016 Language: C++ Result: Accepted Time:240 ms Memory:1340 kb****************************************************************/