HDU 1272 小希的迷宫
2012-08-03 18:04
281 查看
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1272
并查集的简单应用
解题思路:题目意思是找到判断是不是连通无环的图,首先想到的就是并查集。
1判断成环的时候,只要判断输入边的两个点。有一个共同的父节点,那么这两个点就成环。
2判断连通的时候,只要判断根节点数为1即可。
注意:当输入的这组数据只有 0 0 时,依然是满足条件的,即应输出 "Yes"。
View Code
并查集的简单应用
解题思路:题目意思是找到判断是不是连通无环的图,首先想到的就是并查集。
1判断成环的时候,只要判断输入边的两个点。有一个共同的父节点,那么这两个点就成环。
2判断连通的时候,只要判断根节点数为1即可。
注意:当输入的这组数据只有 0 0 时,依然是满足条件的,即应输出 "Yes"。
View Code
#include<iostream> using namespace std; #define MAX 100005 int father[MAX],flag,sign[MAX]; int FindSet(int x) { while(x!=father[x]) x=father[x]; return x; } void Union(int x,int y) { x=FindSet(x); y=FindSet(y); if(x!=y) father[x]=y; else flag=0; //同父节点,成环 } int main() { int i,a,b; while(cin>>a>>b) { if(a==-1&&b==-1) break; if(a==0&&b==0) { cout<<"Yes"<<endl; continue; } for(i=1;i<MAX;i++) { father[i]=i; sign[i]=0; } sign[a]=sign[b]=1; flag=1; Union(a,b); while(cin>>a>>b) { if(a==0&&b==0) break; Union(a,b); sign[a]=sign[b]=1; } int k=0; for(i=1;i<MAX;i++) { if(sign[i]&&father[i]==i) //判断根节点k数目 k++; if(k>1) flag=0; } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
相关文章推荐
- 小希的迷宫 HDU - 1272
- HDU 1272: 小希的迷宫(并查集)
- [HDU 1272] 小希的迷宫
- HDU 1272 小希的迷宫
- 小希的迷宫 HDU - 1272
- hdu 1272 小希的迷宫
- hdu1272 小希的迷宫
- hdu1272 小希的迷宫 并查集
- HDU1272 小希的迷宫 并查集
- HDU 1272 小希的迷宫
- HDU - 1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫
- HDU-1272 小希的迷宫 (并查集)
- HDU - 1272 小希的迷宫(简单并查集)
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫 并查集
- HDU 1272 小希的迷宫(并查集,判断是否成环)
- hdu 1272 小希的迷宫(并查集+最小生成树+队列)
- 【hdu 1272 基础并查集】小希的迷宫
- 并查集总结【模板】 例题:①简单POJ - 1611 The Suspects ②一般HDU - 1272 小希的迷宫