您的位置:首页 > 其它

hdu1272 小希的迷宫

2013-08-26 11:56 344 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272

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

#include <stdio.h>
#include <string.h>
#define MAXN 100002

int 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;
}
else
sig=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");
else
printf("Yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: