hdu 1325 is it a tree?
2014-08-19 11:32
344 查看
这道题在poj上可以很容易过,而hdu却过不了。应该属于 poj 数据弱的原因吧。
笔者之前做了 hdu 1272, 是一道判断无向树的问题,如果你用这个代码去交poj,应该是能过的。
但是无向树和有向树是有区别的, 有向树要求整个树中只有一个入度为 0 的结点,其他节点入度只能为1,而无向树中没有入出度的概念。
例如:1 2 3 2 0 0 有向图中九不是树了。
解决了这个问题这道题应该就简单了(多出一个数组来存每个顶点的入度就行了)。
这道题比较坑的还有结束条件,把 -1 -1 结束 改成 有一个小于0就结束吧。
笔者之前做了 hdu 1272, 是一道判断无向树的问题,如果你用这个代码去交poj,应该是能过的。
但是无向树和有向树是有区别的, 有向树要求整个树中只有一个入度为 0 的结点,其他节点入度只能为1,而无向树中没有入出度的概念。
例如:1 2 3 2 0 0 有向图中九不是树了。
解决了这个问题这道题应该就简单了(多出一个数组来存每个顶点的入度就行了)。
这道题比较坑的还有结束条件,把 -1 -1 结束 改成 有一个小于0就结束吧。
#include<stdio.h> #include<string.h> int node[100008]; bool peak[100008]; int in[100008]; int peak_num; int edge; int mcount; void initial(int n){ mcount = 0; for(int i= 1;i <= n; i++){ node[i] = i; } } int mfind(int p){ while( p != node[p]){ node[p] = node[node[p]]; p = node[p]; } return p; } int uni(int p, int q){ int pi = mfind(p); int qi = mfind(q); if( pi == qi ){ return 0; } peak[p] = true; peak[q] = true; in[q] ++; edge ++; node[qi] = node[pi]; return 1; } int main(){ int a, b; int k = 1; while(~scanf("%d %d", &a, &b)){ edge = 0; int flag = 0; peak_num = 0; initial(100000); memset(peak, 0, sizeof(peak)); memset(in, 0, sizeof(in)); if(a < 0 || b < 0) break; if( a == 0 && b == 0){ printf("Case %d is a tree.\n", k++); continue; } if(!uni(a, b) && a != b) flag = 1; while(~scanf("%d %d", &a, &b)){ if(a == 0 && b == 0) break; if(!uni(a, b) && a != b) flag = 1; } for(int i= 1; i <= 100000; i++){ if(peak[i]){ peak_num ++; if(node[i] == i) mcount ++; } int zero_num = 0; if(in[i] == 0) zero_num++; if(in[i] > 1 || zero_num > 1){ flag = 1; } } if(mcount != 1){ flag = 1; } if(peak_num - edge != 1){ flag = 1; } if(flag) printf("Case %d is not a tree.\n", k++); else printf("Case %d is a tree.\n",k++); } return 0; }
相关文章推荐
- hdu 1325 Is It A Tree?
- HDU 1325 Is It A Tree?
- hdu 1325--Is It A Tree?
- TOJ 1856 POJ 1308 HDU 1325 Is It A Tree? / 并查集
- HDU-1325-Is It A Tree?
- hdu 1325 Is It A Tree?
- hdu 1325 Is It A Tree?
- hdu 1325 Is It A Tree?
- hdu 1325 is it a tree?
- hdu 1325 Is It A Tree?
- hdu 1325 Is It A Tree?
- hdu 1325 Is It A Tree?
- HDU 1325 Is It A Tree?(并查集)
- hdu 1325 Is It A Tree?
- 【并查集】hdu 1325 Is It A Tree? 或 poj 1308 Is It A Tree?
- HDU 1325 POJ 1308 Is It ATree?(并查集)
- hdu 1325 Is It A Tree?(并查集)
- hdu 1325 Is It A Tree?
- [HDU] 1325 Is It A Tree?
- HDU 1325 Is It A Tree? POJ 1308 Is It A Tree? (并查集+入度,判断一个有向图是树)