并查集 HDU1232 畅通工程
并查集基本入门 畅通工程 HDUhttp://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<stdio.h> #define N 1000 int set[N]; void init(int n) { int i; for(i=1;i<=n;++i) set[i] = i; } int root(int x) { if(set[x]!=x) set[x] = root(set[x]); return set[x]; } void merge(int a, int b) { int x = root(a); int y = root(b); if(x!=y) set[x] = y; } int main() { int city; int way; int i; int a,b; int result; while(~scanf("%d %d",&city,&way)&&city!=0) { result = 0; init(city); for(i=1;i<=way;++i) { scanf("%d %d",&a,&b); merge(a,b); } for(i=1;i<=city;++i) if(root(i)==i) result++; printf("%d\n",result-1); } return 0; }
每天早上叫醒你的不是闹钟,而是心中的梦~