hdu 1325 Is It A Tree?

来源:互联网 发布:java获取系统当前年份 编辑:程序博客网 时间:2024/05/21 09:12

题目分析:给定很多边,判断是否为树,,,,

                  1.有且仅有一个根节点,每个节点的入度不大于1(开始没考虑到这点,一直wa)。

                  2.无圈

                   2.0 0 是棵空树

代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{     int v; bool  flag; int indegree;}parent[100100];int find(int x){int i;for(i=x;i!=parent[i].v;i=parent[i].v);while(x!=i){int temp=parent[x].v;parent[x].v=i;        x=temp;}return i;}int main(){int x,y,num=0,c=0;bool flag=true;for(int i=1;i<=100000;i++){parent[i].v=i;parent[i].flag=false;parent[i].indegree=0;}while(scanf("%d %d",&x,&y)!=EOF){if(x+y==-2)break;if(x==0&&y==0){c++;for(int i=1;i<=100000;i++){if(parent[i].flag!=0 && parent[i].v==i)    num++;}if(flag==true && (num==1||num==0) )printf("Case %d is a tree.\n",c);elseprintf("Case %d is not a tree.\n",c);           //printf("%d***\n",flag);for(int i=1;i<=100000;i++){parent[i].v=i;parent[i].flag=false;parent[i].indegree=0;}num=0;flag=true;}else{parent[x].flag=true;parent[y].flag=true;if(parent[y].indegree>=1)flag=false;elseparent[y].indegree=1;int fx=find(x);int fy=find(y);if(fx==fy)flag=false;else if(fx<fy)parent[fy].v=fx;elseparent[fx].v=fy;}}//system("pause");return 0;}


原创粉丝点击