HDU 1272 小希迷宫(并检查集合)

意甲冠军:被判处无向图无环和连接无处不在

思考:并检查集合,trap 您可能有一个直接输入0 0

并且....合并的时候按某一个方向会爆栈,爆了好几次...下次考虑一下直接递归找祖先吧

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N =1e5+1e2;
int fa[N];
int getf(int x)
{
    return x==fa[x]?

x:fa[x]=getf(fa[x]); } int Merge(int x,int y) { int t1=getf(x); int t2=getf(y); if(t1==t2) return false; fa[t2]=t1; return true; } bool vis[N]; bool flag; int cnt; void ini() { for(int i=1;i<100005;i++) fa[i]=i; flag=true; cnt=0; memset(vis,0,sizeof(vis)); } int main() { int u,v; while(scanf("%d%d",&u,&v),~u) { if(!(u||v)) { puts("Yes"); continue; } ini(); vis[u]=vis[v]=true; flag=Merge(u,v); while(scanf("%d%d",&u,&v),(u||v)) { vis[u]=vis[v]=true; if(!flag) continue; flag=Merge(u,v); } if(flag) for(int i=1;i<100005;i++) if(vis[i]&&fa[i]==i) cnt++; if(cnt>1) flag=0; if(flag) puts("Yes"); else puts("No"); } return 0; }



版权声明:本文博主原创文章。博客,未经同意不得转载。

posted @ 2015-10-17 18:02  phlsheji  阅读(140)  评论(0编辑  收藏  举报