题意:N个城市,判断需要多少条道路连通
例:8个城市都不连通的话最多需要7条道路
#include <iostream>
#include <cstdio>
using namespace std;
int arr[100001];
int p, q;
int cnt;
void init() {
for (int i=0; i<100001; i++) {
arr[i] = i;
}
}
int myfind(int x) {
if (x != arr[x]) {
arr[x] = myfind(arr[x]);
}
return arr[x];
}
void myunion(int a, int b) {
int a1 = myfind(a);
int b1 = myfind(b);
if (a1 != b1) {
arr[a1] = b1;
cnt--;
}
}
int main() {
int n, m;
while (scanf("%d", &n) && n) {
scanf("%d", &m);
init();
cnt = n - 1;
for (int i=0; i<m; ++i) {
scanf("%d%d", &p, &q);
myunion(p, q);
}
printf("%d\n", cnt);
}
return 0;
}