HDU1232-畅通工程
http://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<stdio.h> #define MAX 1005 int fa[MAX]; int find(int x) { return fa[x]==x?x:fa[x]=find(fa[x]); } void merge(int x,int y) { x=find(x); y=find(y); if(x!=y) fa[x]=y; } int main(void) { int n,m,x,y,i,j,sum; while(scanf("%d",&n)&&n) { scanf("%d",&m); for(i=1;i<=n;i++) fa[i]=i; while(m--) { scanf("%d%d",&x,&y); merge(x,y); } sum=0; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(find(i)!=find(j)) { sum++; fa[find(i)]=find(j); } printf("%d\n",sum); } return 0; }