HDU 1272 小希的迷宫

来源:互联网 发布:java jdk源码分析书籍 编辑:程序博客网 时间:2024/04/28 03:50

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

#include<stdio.h>#include<string.h>int p[100005],flag,sign[100005];//数组开在主函数里,这个代码就超时了int find(int x){return p[x]==x?x:p[x]=find(p[x]);}void father (int x,int y){    int xx=find(x);int yy=find(y);    if(xx!=yy) p[xx]=yy;    else flag=0;}int main(){     int i,x,y;        while(scanf("%d%d",&x,&y))        {            if(x==-1&&y==-1) break;            if(x==0&&y==0)            {                    printf("Yes\n");                    continue;            }            for(i=0;i<=100004;i++)  {p[i]=i;sign[i]=0;}            sign[x]=sign[y]=1; flag=1;            father(x,y);            while(scanf("%d%d",&x,&y))            {                if(x==0&&y==0) break;                father(x,y);                sign[x]=sign[y]=1;            }            int k=0;            for(i=1;i<100005;i++)            {                if(sign[i]&&p[i]==i)                k++;//k>1时,说明有多棵树,走不全所有点                if(k>1) {flag=0;break;}            }            if(flag) printf("Yes\n");            else printf("No\n");        }    return 0;}