HDU 1272 小希的迷宫
2014-01-04 15:03
337 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272
题目解析
并查集问题
注意点
1.题目中的要求给的比较宽泛,导致大家认为只是存在回环就是错误,然而错误不止这一种,如果存在两棵树或者多棵树的现象那么也是错误的(即从A到不了B);
2.自身与自身相连接也是错误的一种。
可能的测试数据
答案:
参考代码
题目解析
并查集问题
注意点
1.题目中的要求给的比较宽泛,导致大家认为只是存在回环就是错误,然而错误不止这一种,如果存在两棵树或者多棵树的现象那么也是错误的(即从A到不了B);
2.自身与自身相连接也是错误的一种。
可能的测试数据
1 1 0 0 0 0 1 2 3 4 0 0 1 2 2 3 3 4 0 0 1 3 5 3 0 0 -1 -1
答案:
No Yes No Yes Yes
参考代码
#include <stdio.h> int fa[100005]; //父亲数组 int visit[100005]; //表示是否被连接过 int load(){ int i; for(i = 0; i<100005; i++) fa[i] = i; } int find(int x){ if(x!=fa[x]) fa[x] = find(fa[x]); return fa[x]; } int main(){ int m, n; int x, y, fx, fy; int i, flag, flag1, count; while(scanf("%d%d", &m, &n)){ flag = 0; count = 0; flag1 = 0; if(m==-1&&n==-1) break; else if(m==0&&n==0); else { load(); memset(visit, 0, sizeof(visit)); fa[m] = n; visit[m] = 1; visit = 1; if(m==n) flag = 1; while(scanf("%d%d", &x,&y),x&&y){ fx = find(x); fy = find(y); visit[x] = 1; visit[y] = 1; if(fx==fy) flag = 1; else fa[fx] = fy; } } for(i = 0; i<100005; i++){ if(visit[i]&&fa[i]==i) flag1++; if(visit[i]) count++; } if(count==0) printf("Yes\n"); //0 0的测试数据 else if(!flag&&flag1==1) printf("Yes\n"); //没有回环并且只有一棵树 else printf("No\n"); } return 0; }
相关文章推荐
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫 [并查集+回路判定]
- HDU1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫 并查集
- 小希的迷宫 hdu 1272
- HDU 1272 小希的迷宫(并查集)
- hdu1272 小希的迷宫
- hdu1272 小希的迷宫
- hdu 1272 小希的迷宫(并查集)
- hdu 1272小希的迷宫(并查集判断无向图回路)
- HDU~1272~小希的迷宫
- hdu_1272 小希的迷宫
- hdu 1272 小希的迷宫 (并查集)
- HDU-1272 小希的迷宫
- HDU - 1272 - 小希的迷宫
- hdu 1272 小希的迷宫(并查集判断回路和是否连通)
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- hdu-1272 小希的迷宫【并查集】
- HDU - 1272 - 小希的迷宫