POJ1308 Is It A Tree?
2012-07-07 09:53
267 查看
1. 并查集,有点忘了,看维基百科回顾起来了,三个操作,路径压缩、合并、查找父节点。代码很简单,具体参考http://zh.wikipedia.org/wiki/%E5%B9%B6%E6%9F%A5%E9%9B%862. WA了好多次,最后发现是当空树的时候也是一棵树,fuck。。。
#include <iostream>#include <fstream>#include <string>#include <algorithm>#include <cstring>#include <stack>#include <queue>#define maxn 1000using namespace std;int p[maxn], flag[maxn];int getfather(int x){return p[x] == x ? x : p[x] = getfather(p[x]);}int main(){int t = 1, a, b;while (cin >> a >> b && a != -1){if (!a){cout << "Case " << t++ << " is a tree." << endl;continue;}int is = 1, tail = 0;for (int i = 1; i < maxn; ++i){p[i] = i;flag[i] = 0;}while (a){if (is){int ra = getfather(a), rb = getfather(b);if (ra == rb){is = 0;}else{p[rb] = ra;flag[a] = flag[b] = 1;tail = max(tail, max(a, b));}}cin >> a >> b;}if (!is){cout << "Case " << t++ << " is not a tree." << endl;}else{int roots = 0;for (int i = 1; i <= tail; i++){if (flag[i] && p[i] == i){roots++;if (roots > 1)break;}}if (roots == 1)cout << "Case " << t++ << " is a tree." << endl;elsecout << "Case " << t++ << " is not a tree." << endl;}}return 0;}
相关文章推荐
- POJ 1308 Is It A Tree?(判断是否是一棵树)
- poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- HDU 1325 POJ 1308 Is It A Tree? (并查集)
- poj 1308 is it a tree
- POJ1308——Is It A Tree?
- POJ 1308 Is It A Tree? (两种解法)
- Poj 1308 Is It A tree
- POJ 1308 Is It A Tree?(并查集)
- poj1308——Is It A Tree?(判断是否为树)
- POJ 1308 Is It A Tree?
- hdu 1325/poj 1308 Is It A Tree? 并查集
- poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- 【并查集】hdu 1325 Is It A Tree? 或 poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- POJ 1308 Is it a tree(并查集)
- POJ-1308 Is It A Tree?
- POJ 1308 Is It A Tree?(并查集)
- poj 1308 Is It A Tree?(并查集)