HDOJ 1272 小希的迷宫 杭电 ACM

这题的基本结构和1232一样 

但无需考虑重复输入路径(包括颠倒)的情况  所以出现同根必然有回路

另外 要考虑无顶点的空图 给出特判

以上两点 题中似乎未给出明确信息 空手写完调整一下才AC


#include
int i,p[100005],s[100005],a,b,cnt,loop;//s标记出现过的顶点 后面才能通过p得出连通分量数
int rt(int x){return p[x]==x?x:rt(p[x]);}
void f(int a,int b){
    int x=rt(a),y=rt(b);
    if(x!=y)p[x]=y;
    else loop=1;
}
int main(){
    while(scanf("%d%d",&a,&b),a>-1){
        if(!a){puts("Yes");continue;}
        for(loop=0,i=1;i<100005;++i)p[i]=i,s[i]=0;
        do f(a,b),s[a]=s[b]=1;
        while(scanf("%d%d",&a,&b),a);
        for(cnt=-1,i=1;i<100005;++i)
            if(s[i]&&p[i]==i)cnt++;
        puts(!cnt&&!loop?"Yes":"No");
    }
}


你可能感兴趣的:(ACM,HDOJ)