hdu 1325 Is It A Tree?
2012-11-18 15:52
429 查看
/* 人倒霉起来什么都悲催,今天竟然被题目水了
没看清题目在加上惯性思维,以为是输入都是-1时结尾
献用G++交,runtime,我开始开打数组,再C++交TLE,我开始开小数组
最后才发现原来输入是以小于0结尾的,
*/
没看清题目在加上惯性思维,以为是输入都是-1时结尾
献用G++交,runtime,我开始开打数组,再C++交TLE,我开始开小数组
最后才发现原来输入是以小于0结尾的,
*/
#include <stdio.h> #include <string.h> int f[1001],g[1001]; int find(int x) //并查集的查找,找到共同的父亲 { if(f[x]!=x) f[x]=find(f[x]); return f[x]; } int main() { int a,b,tt=1; while(scanf("%d%d",&a,&b)!=EOF) { int i,flag=0,t=0; if(a<0&&b<0) //!!! break; for(i=0;i<=1000;i++) f[i]=i; if(find(a)==find(b)) flag=1; else f[find(b)]=find(a); while(scanf("%d%d",&a,&b)) { if(a==0&&b==0) break; int aa,bb; aa=find(a); bb=find(b); if(aa==bb||bb!=b) //成环就不是树,后面的是检查是否有两个父节点,。。 flag=1; else f[bb]=aa; } memset(g,0,sizeof(g)); for(i=1;i<=1000;i++) //保证只有一个根,不然就是森林了 if(f[i]!=i) g[find(i)]++; for(i=1;i<=1000;i++) //检查是否只有一个头结点就是了 if(g[i]>0) t++; if(t>1) flag=1; if(flag==1) printf("Case %d is not a tree.\n",tt++); else printf("Case %d is a tree.\n",tt++); } return 0; }
相关文章推荐
- hdu 1325 is it a tree?
- HDU-1325 Is It A Tree? ACM解题报告(恶心的并查集)
- HDU 1325 POJ 1308 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?
- hdu1325 Is It A Tree?(二叉树的推断)
- HDU-1325-Is It A Tree?
- 【并查集】HDU 1325 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?
- 并查集-Is It A Tree?hdu 1325
- HDU-1325-Is It A Tree?
- hdu 1325 Is It A Tree?
- HDU 1325 Is It A Tree?(并查集或者树)