4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
1 0 2 998
简单并查集!
AC码:
#include<stdio.h> int f[1003]; int find(int i) { if(f[i]!=i) f[i]=find(f[i]); return f[i]; } void make(int a,int b) { int p=find(a); int q=find(b); f[p]=q; } int main() { int n,m,i,count=0,a,b; while(scanf("%d",&n)&&n) { scanf("%d",&m); for(i=1;i<=n;i++) f[i]=i; for(i=0;i<m;i++) { scanf("%d%d",&a,&b); make(a,b); } count=0; for(i=1;i<=n;i++) { if(f[i]==i) count++; } printf("%d\n",count-1); } return 0; }
原文地址:http://blog.csdn.net/u012804490/article/details/24798057