- }
- return 0;
- }
- }
- continue;
- /*real_flag1=0;*/ FLAG=0;
- iint();
- else printf("Case %d is a tree.\n",Case++);
- if(ans!=1||FLAG) printf("Case %d is not a tree.\n",Case++);
- if(vis[i]&&pre[i]==i) ans++;
- for(int i=1; i<=MAX; i++)
- int ans=0;
- {
- if(a==0&&b==0)
- join(a,b);
- 1->2,2->3,3>1.
- 记住:1->2 ,3->2时候也是树,所以判断是否为环,直接在每次读 入两个数字时候看它们的最高父节点是否相等,相等泽成环,比如
- if(find(a)==find(b)&&a!=0&&b!=0) FLAG=1;
- /*if(real_flag1) FLAG=1;*/ //天真
- }*/
- //POJ会WA可能是,如3->1 2->1都算一个树了,2333
- //非环时,最高父节点不会被指向,所以不被指的有且只有1个
- if(vis[i]&&visB[i]==0) real_flag2++;
- //判断根节点是否都有且只有一次,或者说父节点只有一个
- if(vis[i]&&visB[i]>1) real_flag1=1;
- {
- /*for(int i=1; i<=MAX; i++)
- MAX=max(MAX,a); MAX=max(MAX,b);
- vis[a]=vis[b]=1;
- visB[b]++;
- flag=1;
- }
- continue;
- iint();
- printf("Case %d is a tree.\n",Case++);
- { //空树也是树
- if(a==0&&b==0&&flag==0)
- {
- while(~scanf("%d%d",&a,&b),a>=0&&b>=0)
- iint();
- int a,b,Case=1/*,real_flag1=0*/,FLAG=0;
- {
- int main()
- }
- if(fx!=fy) pre[fx]=fy;
- int fx=find(x),fy=find(y);
- {
- void join(int x,int y)
- }
- return x==pre[x]?x:find(pre[x]);
- {
- int find(int x)
- }
- MAX=0; flag=0;
- }
- vis[i]=0;
- visB[i]=0;
- pre[i]=i;
- {
- for(int i=0; i<=maxn; i++)
- {
- void iint()
- int pre[maxn],visB[maxn],root,vis[maxn],MAX,flag=0;
- #define maxn 1005
- using namespace std;
- #define INF 0x3f3f3f3f
- #include
- #include
- #include
- #include
- #include
- //Is It A Tree
来源: http://www.cnblogs.com/weimeiyuer/p/7162605.html