杭电ACM1269——迷宫城堡~~并查集
2015-05-16 20:44
381 查看
这题,可以用并查集来解决。需要用到两个数组来判断从i到j以及j到i的是否属于同一个并查集。
下面的是AC的代码:
下面的是AC的代码:
#include <iostream> #include <cstdio> using namespace std; int par[2][10005]; int n, m; int finds(int x, int i) { if(x == par[i][x]) return x; else return par[i][x] = finds(par[i][x], i); } void join(int x, int y) //并查集合并 { if(x != n) //没有包含第n个放间的两个房间,在0和1的地方都要合并,包含n的特殊处理 { x = finds(x, 0); y = finds(y, 0); if(x != y) par[0][x] = y; } if(y != n) { x = finds(x, 1); int fy = finds(y, 1); if(x != y) par[1][y] = x; } } int main() { int a, b; while(scanf("%d%d", &n, &m) != EOF && m + n != 0) { for(int j = 0; j <= n; j++) par[0][j] = par[1][j] = j; for(int i = 0; i < m; i++) { scanf("%d%d", &a, &b); join(a, b); } int flag = 0; for(int k = 1; k <= n; k++) //并查集合并之后,都是属于第n个,所以判断是否等于n { if(finds(k, 0) != n || finds(k, 1) != n) { flag = 1; break; } } if(flag) cout << "No" << endl; else cout << "Yes" << endl; } return 0; }
相关文章推荐
- acm杭电HDU1232畅通工程 并查集 模板题
- 杭电1269迷宫城堡(二维并查集过)
- ACM杭电OJ裸并查集 A - 畅通工程
- 杭电ACM 第2061题
- 杭电ACM 第2088题
- 杭电acm 5687Problem C(字典树)
- HDOJ 1232 畅通工程 杭电 ACM
- 杭电 acm 2012 素数判定
- 杭电ACM_1016_素数环
- 杭电ACM大数JAVA提交实例
- 杭电acm阶段之理工大版
- 杭电ACM 1069Monkey and Banana
- acm 杭电 Delta-wave 1030
- 杭电ACM 1297 Children’s Queue
- 杭电 ACM 2045 不容易系列之(3)—— LELE的RPG难题
- 奋战杭电ACM(DAY1)
- 杭电acm 1002 A + B Problem II
- 杭电ACM 2040 亲和数
- 杭电acm 2005
- 杭电ACM(HDUOJ)试题分类