HDU 1481 树的性质(神坑)
来源:互联网 发布:如何查看域名劫持 编辑:程序博客网 时间:2024/06/02 15:37
#include<bits/stdc++.h>int main(){ int a,b,kase=0; while(scanf("%d%d",&a,&b)&&(a>0||b>0)&&++kase) { std::set<int>all,inb; int cnt=0; while(a!=0&&b!=0) { cnt++; all.insert(a); all.insert(b); inb.insert(b); scanf("%d%d",&a,&b); } if(cnt==inb.size()&&cnt==all.size()-1) printf("Case %d is a tree.\n",kase); else printf("Case %d is not a tree.\n",kase); }}
树的性质:n个节点n-1条边,任意节点入度小于等于1;
注意有坑:结束为两个小于0的数字,不只是样例的-1!!!
也可以用并查集做
附:并查集代码:
#include <stdio.h>const int max_num = 100000+10;typedef struct{ int num,root,conn;//数据、根、入度}Node;Node node[max_num];void init(){ for(int i = 0; i < max_num; i++) { node[i].conn = 0;//入度初始化为0 node[i].root= i;//根记录为自身 node[i].num=0;//标记数字是否被使用过,0:没有被使用过,1:使用过了 }}int find_root(int a){ if(node[a].root!=a) return node[a].root = find_root(node[a].root); return node[a].root;}void union_set(int a,int b){ a = find_root(a); b = find_root(b); if(a==b)//同一个根,说明是在同一个树下 return; node[b].root=a;//把b的根赋为a的根,此时a已经是根,num==root}int main(){ int n,m; int i = 1; bool flag=true;//true:是个树,false:不是树 init(); while(scanf("%d%d",&n,&m)!=EOF&&n>=0&&m>=0) { if(!flag&&n!=0&&n!=0)continue;//已经确定不是树了,就继续循环 if(n==0&&m==0) { int root_num=0; for(int j = 1; j < max_num;j++) { //判断是否为森林,如果,root_num用来记录根的数目 if(node[j].num && find_root(j)==j) root_num++; if(node[j].conn>1)//如果出现某个节点的入度超过1,不是树 { flag = false; break; } } if(root_num>1)//连通分支大于1,是森林不是树 flag=false; if(flag) printf("Case %d is a tree.\n",i++); else printf("Case %d is not a tree.\n",i++); flag = true; init(); continue; } if(m!=n&&find_root(n)==find_root(m)) flag = false; else { //将m,n,记录为节点 node[m].num = 1; node[n].num = 1; node[m].conn++;//入度增加一 union_set(n,m); } } return 0;}
0 0
- HDU 1481 树的性质(神坑)
- HDU 4171 Paper Route(树的性质+BFS)
- HDU 5414 矩阵的性质
- HDU 5512(GCD性质)
- hdu 5423 Rikka with Tree 树的性质
- HDU 5534 Partial Tree(考虑树性质的dp)
- [HDU 5753] Permutation Bo (期望的线性性质)
- hdu 5728 (欧拉函数性质的应用)
- 二叉树的性质
- 二叉树的性质
- 二叉树的性质
- 二叉树的性质
- 二叉树的性质
- 二叉树的性质
- 树的性质
- 二叉树的性质
- 二叉树的性质
- 二叉树的性质
- 面试题9:斐波拉契数列
- CT鸡的第一次
- 面试题10:求二进制中1的个数
- Android 记录1 自定义View
- 使用MySQL图形化工具Navicat创建表
- HDU 1481 树的性质(神坑)
- Java利用Zxing生成二维码
- Maven入门指南⑤:使用Nexus搭建Maven私服
- 2.3-7
- Android 常用 adb 命令总结
- JavaScript自学第4讲:JavaScript运算符介绍
- 建造者模式
- 在java中生成二维码,并直接输出到jsp页面
- html中的meta