标签:style blog http 2014 io for
树 除了空树外,有且仅有一个根结点,且除根结点外,其余结点有且仅有一个前驱
判断图是否为树,则需判断它们的公共祖先是否仅有一个,且入度都小于2,并且不能形成环
#include<stdio.h> #define N 100000 int f[N+10],t[N+10],c[N+10]; int find(int a) { if(a!=f[a]) f[a]=find(f[a]); return f[a]; } int mix(int a,int b) { int x,y; x=find(a); y=find(b); if(x==y) return 0; f[x]=y; return 1; } int main() { int i,j=0,n,m,a,b,flag; while(scanf("%d%d",&m,&n)!=EOF){ if(m<0&&n<0) //当输入两个负数时结束 break; j++; if(m==0&&n==0){ printf("Case %d is a tree.\n",j); continue; } for(i=1;i<=N;i++){ f[i]=i; c[i]=t[i]=0; } flag=1; while(m!=0&&n!=0){ t[m]=t[n]=1; c[n]++; //计算入度 if(c[n]>1) flag=0; a=mix(m,n); //判断是否会形成环 if(!a) flag=0; scanf("%d%d",&m,&n); } if(flag){ b=0; for(i=1;i<=N;i++){ if(t[i]&&f[i]==i) b++; //计算根结点数目 if(b>1) break; } } if(flag&&b==1) printf("Case %d is a tree.\n",j); else printf("Case %d is not a tree.\n",j); } return 0; }
poj 1308 Is It A Tree?,布布扣,bubuko.com
标签:style blog http 2014 io for
原文地址:http://blog.csdn.net/acm_code/article/details/37878237