P1536 村村通

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 } 
原文地址:https://www.cnblogs.com/tflsnoi/p/14269519.html