hdu 1325 Is It A Tree?
2012-07-12 11:37
323 查看
题目分析:给定很多边,判断是否为树,,,,
1.有且仅有一个根节点,每个节点的入度不大于1(开始没考虑到这点,一直wa)。
2.无圈
2.0 0 是棵空树
代码:
1.有且仅有一个根节点,每个节点的入度不大于1(开始没考虑到这点,一直wa)。
2.无圈
2.0 0 是棵空树
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct node{ int v; bool flag; int indegree; }parent[100100]; int find(int x) { int i; for(i=x;i!=parent[i].v;i=parent[i].v); while(x!=i) { int temp=parent[x].v; parent[x].v=i; x=temp; } return i; } int main() { int x,y,num=0,c=0; bool flag=true; for(int i=1;i<=100000;i++) { parent[i].v=i; parent[i].flag=false; parent[i].indegree=0; } while(scanf("%d %d",&x,&y)!=EOF) { if(x+y==-2) break; if(x==0&&y==0) { c++; for(int i=1;i<=100000;i++) { if(parent[i].flag!=0 && parent[i].v==i) num++; } if(flag==true && (num==1||num==0) ) printf("Case %d is a tree.\n",c); else printf("Case %d is not a tree.\n",c); //printf("%d***\n",flag); for(int i=1;i<=100000;i++) { parent[i].v=i; parent[i].flag=false; parent[i].indegree=0; } num=0; flag=true; } else { parent[x].flag=true; parent[y].flag=true; if(parent[y].indegree>=1) flag=false; else parent[y].indegree=1; int fx=find(x); int fy=find(y); if(fx==fy) flag=false; else if(fx<fy) parent[fy].v=fx; else parent[fx].v=fy; } } //system("pause"); return 0; }
相关文章推荐
- hdu 1325 Is It A Tree? (并查集)
- HDU 1325 Is It A Tree?
- POJ 1308 && HDU 1325 Is It A Tree? (并查集)
- HDU 1272小希的迷宫 1325Is 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?
- HDU 1325 Is It A Tree?(并查集)
- hdu---(1325)Is It A Tree?(并查集)
- HDU 1325 Is It A Tree?(并查集/有向树的判断)
- poj - 1308 - Is It A Tree?(Uva - 615, hdu - 1325)
- hdu 1325 is it a tree?