HDU 1272 小希的迷宫
2013-04-16 10:55
423 查看
(1) 判断是否有回路,这个可以用并查集来做,一旦给定的两个节点a,b是属于同一个集合,那么便可以判定有回路
(2)看是否只有一个联通分支,这个可以用并查集来做,最终并查集只有一个根节点
(2)看是否只有一个联通分支,这个可以用并查集来做,最终并查集只有一个根节点
#include <iostream> #include <cstdio> #include <cstring> #define MAX 100000 + 5 using namespace std; int parent[MAX]; bool used[MAX]; void Make_Set(){ for(int i = 0; i < MAX; i ++ ) parent[i] = i; } int Find_Set(int x){ return parent[x] == x ? x : (parent[x]=Find_Set(parent[x])); } bool Union_Set(int x,int y){ int a = Find_Set(x), b = Find_Set(y); if( a == b) return false; else{ parent[a] = b; return true; } } int main(){ while(1){ bool isExit = false, isLoop = false; int a,b; memset(used,false,sizeof(used)); Make_Set(); while(cin >> a >> b && a && b){ if(a == -1 || b == -1) {isExit =true;break;} used[a] = true; used[b] = true; if(!Union_Set(a,b)) isLoop = true; } if(isExit) break; else if(isLoop) cout<<"No"<<endl; else{ int cnt = 0; for(int i = 0 ;i < MAX; i ++ ){ if(used[i] && i == Find_Set(i)) cnt++; } if(cnt == 1 || cnt == 0) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } return 0; }
相关文章推荐
- hdu 1272 小希的迷宫(并查集判断回路和是否连通)
- HDU 1272 小希的迷宫
- HDU1272 小希的迷宫
- HDU - 1272 - 小希的迷宫
- poj 1308 is it a tree?(图的性质||基础并查集) (同hdu 1272 小希的迷宫 )
- HDU 1272——小希的迷宫
- hdu 1272 小希的迷宫
- HDU-1272 小希的迷宫 并查集
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- hdu1272——小希的迷宫
- hdu1272 小希的迷宫 hdu1856 More is better
- 父节点回路hdu 1272 小希的迷宫
- hdu1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
- HDU1272 小希的迷宫(并查集,无环图)
- hdu 1272 小希的迷宫