hdu 1272 小希的迷宮
#include
const int _=100000+5;
int bin[_],vis[_];
int _find(int x)
{
while(x!=bin[x]) x=bin[x];
return x;
}
void intt()
{
int i;
for(i=1; i<_; i++)
{
bin[i]=i;
vis[i]=0;
}
}
int main()
{
int i,x,y,flag=1,ans;
intt();
while(~scanf("%d%d",&x,&y))
{
if(x==-1&&-1==y) break;
else if(0==x&&0==y)
{
if(flag==0) printf("No\n");
else
{
ans=0;
for(i=1; i<_; i++)
{
if(vis[i]&&bin[i]==i) ans++;
}
if(ans>1) printf("No\n");
else printf("Yes\n");
}
flag=1;
intt();
}
else
{
vis[x]=1,vis[y]=1;
int fy=_find(y),fx=_find(x);
if(fy==fx) flag=0;
else if(fy>fx) bin[fy]=fx;
else bin[fx]=fy;
}
}
return 0;
}