最小生成树。。
#include"stdio.h" int set[1002],v[1003],cnt[1002],flag; void fun() { int i; flag=0; for(i=1;i<=1000;i++) { set[i]=i; v[i]=0; cnt[i]=0; } } int find(int x) { return set[x]==x?x:find(set[x]); } int ffun() { int i,t; for(i=1;i<=1000;i++) { if(v[i]) cnt[find(i)]++; } t=0; for(i=1;i<=1000;i++) { if(cnt[i]>1) t++; } if(t>1) return -1; else return 1; } int main() { int a,b,num; fun();num=0; while(scanf("%d%d",&a,&b)) { if(a<0) break; if(a==0&&b==0) { num++; if(flag) printf("Case %d is not a tree.\n",num); if(!flag) { if(ffun()==1) printf("Case %d is a tree.\n",num); else printf("Case %d is not a tree.\n",num); } fun(); continue; } v[a]=v[b]=1; if(find(a)==find(b)||find(b)!=b)//这里注意find(b)!=b不能忘,是为了防止 flag=1; else set[b]=a; } return 0; }