【HDU-1232】畅通工程

【HDU-1232】畅通工程_第1张图片
【HDU-1232】畅通工程_第2张图片

#include 
using namespace std;

const int SIZE = 1 << 20;
int fa[SIZE];

int get(int x) {
	if (x == fa[x]) return x;
	return fa[x] = get(fa[x]);
}

void merge(int x,int y) {
	fa[get(x)] = get(y);
}

int main() {
	int n, m;
	while(scanf("%d %d",&n,&m) && n != 0) {
		int ans = 0;
		for (int i = 1; i <= n; ++i) {
			fa[i] = i;
		}
		for (int i = 1; i <= m; ++i) {
			int x, y; scanf("%d %d",&x,&y);
			merge(x,y);
		}
		for (int i = 1; i <= n; ++i) {
			if (fa[i] == i) ans++;
		}
		printf("%d\n", ans - 1);
	}
	return 0;
}

你可能感兴趣的:(ACM-ICPC题集)