HDU 1272-小希的迷宫 并查集初级
2014-02-18 19:47
357 查看
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define maxn 100010 using namespace std; int father[maxn],mark[maxn]; int flag; void init()//初始化 { for(int i=0;i<maxn;i++) { father[i]=i; mark[i]=0; } } int find(int x)//查找根 { int r=x; while(r!=father[r]) { r=father[r]; } return r; } void con(int x,int y)//建立联系 { int fx=find(x); int fy=find(y); if(fx!=fy) { father[fx]=fy; } } int main() { int a,b,i; while(scanf("%d%d",&a,&b)!=EOF&&(a!=-1||b!=-1)) { if(a==0&&b==0) { cout<<"Yes"<<endl; continue; } init(); int max=-1,min=maxn,num=0; flag=0; while(a||b) { if(a>max) { max=a; } if(b>max) { max=b; } if(a<min) { min=a; } if(b<min) { min=b; } mark[a]=1;mark[b]=1; int fa=find(a); int fb=find(b); if(fa==fb)//本身就已经连接,这是第二条通路,所以不符合 { flag=1; } else { con(fa,fb); } scanf("%d%d",&a,&b); } if(flag==1) { cout<<"No"<<endl; } else { for(i=min;i<=max;i++) { if(mark[i]==1&&father[i]==i)//没有孤点 { num++; } } if(num==1)//仅有一个特殊点 { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } } return 0; }
相关文章推荐
- hdu1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫
- hdu1272 小希的迷宫 hdu1856 More is better
- Graph Theory NO.2 HDU_1272_小希的迷宫_并查集
- 父节点回路hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫【并查集】
- HDU 1272 小希的迷宫(判断一个图是否为连通图且没有环)
- hdu1272 -- 小希的迷宫(并查集)
- HDU-1272-小希的迷宫
- HDU 1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫 并查集
- C语言:小希的迷宫 HDU - 1272 (并查集——检验是否有回路)
- hdu 1272 小希的迷宫
- HDU - 1272 小希的迷宫
- 【并查集】hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
- HDU1272 小希的迷宫(并查集,无环图)