hdu 1272 小希的迷宫
给你多组n和m,表示,n和m联通,判断是否存在回路,若存在,输出Yes,否则为No
成回路时,输入的两个有共同的根节点。
只连通时,根节点为1,
#include"stdio.h"
int set[100005],visit[100005],flag;
int find(int x)
{
int i,r;
while(set[r]!=r)
r=set[r];
while(r!=set[x])
{
i=set[x];
set[x]=r;
x=i;
}
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx<fy)set[fy]=fx;
else if(fy<fx)set[fx]=fy;
else flag=0;
}
int main()
{
int i,n,m,cnt;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
{
printf("Yes\n");continue;
}
if(n==-1&&m==-1) break;
for(i=1;i<=100000;i++)
{
set[i]=i;
visit[i]=0;
}
flag=1;
visit[n]=visit[m]=1;
merge(n,m);
while(scanf("%d%d",&n,&m)!=EOF&&n!=0)
{
merge(n,m);
visit[n]=visit[m]=1;
}
cnt=0;
for(i=1;i<=100000;i++)
{
if(visit[i]&&set[i]==i)
cnt++;
if(cnt>1) flag=0;
}
if(flag)
printf("Yes\n");
else printf("No\n");
}
return 0;
}
浙公网安备 33010602011771号