123456789101112131415161718192021222324252627282930313233 |
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = 1001;
- int F[MAXN];
- int father(int x){
- return x == F[x] ? F[x] : F[x] = father(F[x]);
- }
- void merge(int x, int y){
- int rx = father(x);
- int ry = father(y);
- if(rx != ry){
- F[rx] = ry;
- }
- }
- int main(){
- int n, m;
- while(cin >> n >> m){
- if(n == 0)break;
- for(int i = 1; i <= n; i++){
- F[i] = i;
- }
- for(int i = 1; i <= m; i++){
- int x, y;
- cin >> x >> y;
- merge(x, y);
- }
- int cnt = 0;
- for(int i = 1; i <= n; i++){
- if(F[i] == i)cnt++;
- }
- cout << cnt - 1 <<endl;
- }
- }
|