hdu 1272 小希的迷宫
2014-05-08 21:17
267 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1272
View Code
#include <cstdio> #include <cstring> #include <algorithm> #define maxn 50000 using namespace std; int in[maxn*4],f[maxn*4]; bool ha[maxn*4]; int max1; struct node { int u,v; }p[maxn*4]; void inti() { for(int i=1; i<=max1; i++) { f[i]=i; } } int find1(int x) { if(x==f[x]) return x; return f[x]=find1(f[x]); } void union1(int a,int b) { int fa=find1(a); int fb=find1(b); if(fa!=fb) { f[fb]=fa; } } int main() { int case1=1; while(scanf("%d%d",&p[0].u,&p[0].v)!=EOF) { if(p[0].u<0||p[0].v<0) break; if(p[0].u==0&&p[0].v==0) { printf("Yes\n",case1++); continue; } memset(in,0,sizeof(in)); memset(ha,false,sizeof(ha)); max1=0; max1=max(max1,p[0].u); max1=max(max1,p[0].v); ha[p[0].u]=ha[p[0].v]=true; in[p[0].v]++; int m=1; while(scanf("%d%d",&p[m].u,&p[m].v)) { if(p[m].u==0&&p[m].v==0) break; in[p[m].v]++; ha[p[m].u]=ha[p[m].v]=true; max1=max(max1,p[m].u); max1=max(max1,p[m].v); m++; } bool flag1=false; int m1=0; for(int i=1; i<=max1; i++) { if(ha[i]&&in[i]>1) { flag1=true; break; } } for(int i=1; i<=max1; i++) { if(ha[i]&&in[i]==0) m1++; } if(flag1||m1!=1) { printf("No\n",case1++); continue; } inti(); for(int i=0; i<m; i++) { union1(p[i].u,p[i].v); } int ans=0; for(int i=1; i<=max1; i++) { if(ha[i]&&f[i]==i) ans++; } if(ans!=1) printf("No\n",case1++); else printf("Yes\n",case1++); } return 0; }
View Code
相关文章推荐
- hdu1272 小希的迷宫 并查集
- HDU1272 小希的迷宫 并查集
- hdu1272 小希的迷宫
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- hdu 1272 小希的迷宫(java实现)
- HDU-1272 小希的迷宫 (并查集)
- HDU - 1272 小希的迷宫(简单并查集)
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫 并查集
- HDU 1272 小希的迷宫(并查集,判断是否成环)
- hdu 1272 小希的迷宫(并查集+最小生成树+队列)
- hdu 1272 (小希的迷宫)
- 【hdu 1272 基础并查集】小希的迷宫
- HDU 1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫(并查集)
- hdu 1272 小希的迷宫 并查集
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集)
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫 并查集