首页 > 代码库 > hdu 1325 is it a tree?
hdu 1325 is it a tree?
网上一搜全是并查集。。 并查集POJ可以水过,HDU就不行了。。
并查集的话:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int pre[1005]; 6 bool vis[1005]; 7 int num[1005]; 8 bool flag; 9 int x,y,icase=1;10 void init()11 {12 for(int i=0;i<=1000;i++)13 pre[i]=i;14 memset(num,0,sizeof(num));15 memset(vis,false,sizeof(vis));16 flag=false;17 }18 int find(int x)19 {20 if(pre[x]!=x)21 pre[x]=find(pre[x]);22 return pre[x];23 }24 void judge()25 {26 for(int i=1;i<=1000;i++)27 if(vis[i]) num[find(i)]++;28 int key=0;29 for(int i=1;i<=1000;i++)30 if(num[i]>1) key++;31 if(key>1) flag=true;32 }33 int main()34 {35 // freopen("in.txt","r",stdin);36 init();37 while(1)38 {39 scanf("%d%d",&x,&y);40 if(x<0 && y<0)41 break;42 else if(x==0 && y==0)43 {44 judge();45 if(flag)46 printf("Case %d is not a tree.\n",icase++);47 else48 printf("Case %d is a tree.\n",icase++);49 init();50 continue;51 }52 else53 {54 vis[x]=vis[y]=true;55 if(find(x)==find(y) || pre[y]!=y)56 flag=true;57 else58 pre[y]=x;59 }60 }61 return 0;62 }
有个坑是只要是输入两个负数就结束,不一定是-1 -1
判断图是否为树:1.是否为连通图 2.是否有环
因为题目给的是从父亲指向儿子,所以直接判断点的入度就可以了
1 #include "iostream" 2 #include "memory.h" 3 #include "cstdio" 4 using namespace std; 5 #define MAXN 1111 6 int fa[MAXN]; 7 int in_degree[MAXN]; 8 bool c[MAXN]; 9 bool ok;10 11 int main()12 {13 int a,b,T = 1;14 while (~scanf("%d%d",&a,&b)) {15 memset(fa,-1,sizeof(fa));16 memset(in_degree,0,sizeof(in_degree));17 memset(c,0,sizeof(c));18 if (a < 0 && b < 0) break;19 c[a] = 1;20 c[b] = 1;21 in_degree[b]++;22 while (~scanf("%d%d",&a,&b),a+b) {23 if (a < 0 && b < 0) return 0;24 in_degree[b]++;25 c[a] = 1;26 c[b] = 1;27 }28 int re = 0;29 int ok = 1;30 for (int i = 0;i < MAXN; ++ i) if (c[i]){31 if (in_degree[i] == 0) re ++;32 if (in_degree[i] > 1) ok = 0;33 }34 if (re == 1 && ok) printf("Case %d is a tree.\n",T);35 else printf("Case %d is not a tree.\n",T);36 T++;37 }38 return 0;39 }
hdu 1325 is it a tree?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。