hdu 1272 小希的迷宫
2014-12-19 21:15
447 查看
题目:
链接:点击打开链接
题意:
思路:
一个并查集,题目就是要让你推断是否是一个连通的无环图。1>推断成环的时候,仅仅要推断输入边的两个点。有一个共同的父节点,那么这两个点就成环。2>推断连通的时候,仅仅要推断根节点数为1就可以。注意:当输入的这组数据仅仅有
0 0 时,依旧是满足,即应输出 "Yes"。
代码:
链接:点击打开链接
题意:
思路:
一个并查集,题目就是要让你推断是否是一个连通的无环图。1>推断成环的时候,仅仅要推断输入边的两个点。有一个共同的父节点,那么这两个点就成环。2>推断连通的时候,仅仅要推断根节点数为1就可以。注意:当输入的这组数据仅仅有
0 0 时,依旧是满足,即应输出 "Yes"。
代码:
#include<iostream> #include<cstdio> #include<cstring> #define MAXN 100010 using namespace std; int a,b; int flag; int root[MAXN],sign[MAXN]; int find(int x) { int r = x; while(r != root[r]) r = root[r]; return r; } void merge(int x,int y) { int fx = find(x); int fy = find(y); if(fx != fy) root[fx] = fy; else//有共同的父节点 flag = 0; } int main() { //freopen("input.txt","r",stdin); int ok; while(scanf("%d%d",&a,&b) != EOF && (a != -1 || b != -1)) { memset(root,0,sizeof(root)); if(a == 0 && b == 0) { printf("Yes\n"); continue; } for(int i=1; i<MAXN; i++) { root[i] = i; sign[i] = 0; } sign[a] = 1; sign[b] = 1;//输入的边的两个点 flag = 1; merge(a,b); while(scanf("%d%d",&a,&b) && (a || b)) { merge(a,b); sign[a] = 1; sign[b] = 1; } ok = 0; for(int i=1; i<MAXN; i++) { if(sign[i] && root[i] == i) ++ok;//根结点数目 if(ok>1) flag = 0; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- Hdu 1272 小希的迷宫
- HDU - 1272 小希的迷宫
- (step5.1.6)hdu 1272(小希的迷宫——并查集)
- HDU 1272 小希的迷宫 并查集
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫 并查集
- HDU - 1272 小希的迷宫(并查集)
- hdu 1272小希的迷宫
- HDU 1272 小希的迷宫(图论+STL应用)
- hdu1272小希的迷宫
- HDU 1272 小希的迷宫
- HDU1272 小希的迷宫(并查集+数据坑)
- 并查集 HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集)
- HDU_1272_小希的迷宫
- hdu 1272 小希的迷宫 并查集
- hdu 1272 小希的迷宫 解题报告
- HDU - 1272 小希的迷宫
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU 1272 小希的迷宫(并查集)