hdu 1232
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1232
题意:中文……
mark:并查集。
代码:
#include <stdio.h> int s[1010]; int find(int a) { if(s[a] == a) return a; return s[a] = find(s[a]); } void merge(int a, int b) { int p = find(a), q = find(b); if(p != q) s[p] = q; } int main() { int n,m,a,b; int i,sum; while(scanf("%d", &n), n) { scanf("%d", &m); for(i = 1; i <= n; i++) s[i] = i; for(i = 0; i < m; i++) { scanf("%d%d", &a, &b); merge(a, b); } sum = 0; for(i = 1; i <= n; i++) if(s[i] == i) sum++; printf("%d\n", sum-1); } return 0; }