https://www.luogu.com.cn/problem/P1536
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n, m, x, y, ans; 4 int fa[1010]; 5 void init(){ 6 for(int i=1; i<=n; i++) 7 fa[i]=i; 8 ans=n; 9 } 10 int find(int x){ 11 if(fa[x]!=x) 12 fa[x]=find(fa[x]); 13 return fa[x]; 14 } 15 void merge(int x, int y){ 16 int xx=find(x); 17 int yy=find(y); 18 fa[xx]=yy; 19 } 20 int main() 21 { 22 while(1){ 23 scanf("%d%d",&n,&m); 24 if(n==0)break; 25 init(); 26 while(m--){ 27 scanf("%d%d", &x, &y); 28 if(find(x)!=find(y)){ 29 merge(x, y); 30 ans--; 31 } 32 } 33 printf("%d ",--ans); 34 } 35 return 0; 36 }