hdu1272 小希的迷宫

来源:互联网 发布:java基本数据类型字节 编辑:程序博客网 时间:2024/05/18 03:56

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272


题解:任意两个房间有且仅有一条路径可以相通,判断是否是一棵树(不存在回路)


#include <stdio.h>#include <string.h>#define MAXN 100002int father[MAXN],flag[MAXN],sig;int find(int x){while(x!=father[x])  x=father[x];  return father[x]; }void Union(int x,int y){int fx=find(x);    int fy=find(y);    if (fx!=fy)    {    father[fx]=fy;}elsesig=1;//如果有共同的根节点,存在回路}int main(){int x,y,i,ans;while(scanf("%d %d",&x,&y)&&((x+y)!=-2)){ans=0;sig=0;if(x+y==0)//空树 {printf("Yes\n");continue;}for(i=0;i<MAXN;++i){father[i]=i;flag[i]=0;}Union(x,y);flag[x]=flag[y]=1;while(scanf("%d %d",&x,&y)){if(x+y==0)break;Union(x,y);flag[x]=1;flag[y]=1;}if(sig==1){printf("No\n");continue;}for(i=1;i<MAXN;++i){if(flag[i]&&father[i]==i)ans++;}if(ans>1)printf("No\n");elseprintf("Yes\n");}return 0;}


原创粉丝点击