小希的迷宫

来源:互联网 发布:主域名跳转到二级域名 编辑:程序博客网 时间:2024/04/30 11:22

地址http://acm.hdu.edu.cn/showproblem.php?pid=1272

 

并查集  大写Y,和N

判断是否构成以环,是否是一条路

#include<stdio.h>#define FMAX 100005int father[FMAX],point[FMAX];int find(int x);void Make_set();main(){    int a,b,max=-1,p1,p2,flag=1,k=0,i;    Make_set();   while(scanf("%d%d",&a,&b),a!=-1||b!=-1)   {       point[a]=1;       point[b]=1;       if(a>max)       max=a;;       if(b>max)       max=b;       if(max==0)        {            printf("Yes\n");            continue;     }     p1=find(a);     p2=find(b);     if(p1!=p2)         father[p1]=p2;       else          {              flag=0;          }     while(scanf("%d%d",&a,&b),a!=0||b!=0)     {         if(flag==0)         continue;           if(a>max)       max=a;;       if(b>max)       max=b;        point[a]=1;       point[b]=1;        p1=find(a);     p2=find(b);     if(p1!=p2)         father[p1]=p2;       else          {              flag=0;          }     }     for(i=1;i<=max;i++)       if(point[i])         if(father[i]==i)           k++;         if(k!=1)          flag=0;         if(flag)           printf("Yes\n");         else         printf("No\n");         Make_set();         k=0;         flag=1;         max=-1;   }    }void Make_set(){    int i;    for(i=1;i<FMAX;i++)    {        father[i]=i;        point[i]=0;    }}int find(int x){    int r=x;    while(father[r]!=r)      r=father[r];      father[x]=r;      return r;}
62ms  不知道该如何优化了、

原创粉丝点击