hdu1272 小希的迷宫

题意:就是不存在环,而且各点相互连通

 

分析:就是一颗树,树的条件,连通,不含圈,边恰好为n-1个,只要满足其中两个条件就可以了,这道题统计节点个数,可以用set,map统计,用并查集

判断是否存在圈,只要注意空树也是正确答案就行了

 

代码:

 

 
  2016/2/8

 

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;

int p[maxn],v[maxn];

void init(){
    memset(v,0,sizeof(v));
    for(int i=0;i<maxn;i++)
        p[i]=i;
}

int find(int x){
    return p[x]==x?x:p[x]=find(p[x]);
}

int main(){
    int d=0,maxid=0,x,y;
    bool ok=1;
    init();
    while(~scanf("%d%d",&x,&y)){
        if(x==0&&y==0){
            if((ok&&d==maxid-1)||d==0)
                puts("Yes");
            else
                puts("No");
            maxid=d=0;init();ok=1;continue;
        }
        if(x==-1&&y==-1)
            return 0;
        d++;
        if(!ok)
            continue;
        if(!v[x]){
            maxid++;
            v[x]=1;
        }
        if(!v[y]){
            maxid++;
            v[y]=1;
        }
        int nx=find(x);
        int ny=find(y);
        if(nx!=ny)
            p[nx]=p[ny];
        else
            ok=0;
    }
}

你可能感兴趣的:(hdu1272 小希的迷宫)