poj 1308 判断是否为一棵树
来源:互联网 发布:慢慢买数据怎么看 编辑:程序博客网 时间:2024/06/06 00:18
题目:
Is It A Tree?
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 31536 Accepted: 10716
Description
A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following properties.
There is exactly one node, called the root, to which no directed edges point.
Every node except the root has exactly one edge pointing to it.
There is a unique sequence of directed edges from the root to each node.
For example, consider the illustrations below, in which nodes are represented by circles and edges are represented by lines with arrowheads. The first two of these are trees, but the last is not.
In this problem you will be given several descriptions of collections of nodes connected by directed edges. For each of these you are to determine if the collection satisfies the definition of a tree or not.
There is exactly one node, called the root, to which no directed edges point.
Every node except the root has exactly one edge pointing to it.
There is a unique sequence of directed edges from the root to each node.
For example, consider the illustrations below, in which nodes are represented by circles and edges are represented by lines with arrowheads. The first two of these are trees, but the last is not.
In this problem you will be given several descriptions of collections of nodes connected by directed edges. For each of these you are to determine if the collection satisfies the definition of a tree or not.
Input
The input will consist of a sequence of descriptions (test cases) followed by a pair of negative integers. Each test case will consist of a sequence of edge descriptions followed by a pair of zeroes Each edge description will consist of a pair of integers; the first integer identifies the node from which the edge begins, and the second integer identifies the node to which the edge is directed. Node numbers will always be greater than zero.
Output
For each test case display the line "Case k is a tree." or the line "Case k is not a tree.", where k corresponds to the test case number (they are sequentially numbered starting with 1).
Sample Input
6 8 5 3 5 2 6 45 6 0 08 1 7 3 6 2 8 9 7 57 4 7 8 7 6 0 03 8 6 8 6 45 3 5 6 5 2 0 0-1 -1
Sample Output
Case 1 is a tree.Case 2 is a tree.Case 3 is not a tree.
分析:
由题意,一棵树的充要条件为:
要么为空树,要么满足:
1.只有一个根节点(入度为零),其他节点入度为一;
2.根节点到其他节点有一条唯一的有向路径。
其实只要满足了第一条第二条自动满足。如果图不连通,不会只有一个根节点;如果路径不唯一,必有一个节点入度不为一。
故思路为:
若为空树直接判为树;
否则,统计每个节点入度,如果除了一个入度为零的结点其他节点入度均为一则是一棵树,若入度为零的结点不唯一或有的结点入度大于一,非树。
代码:
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int in[1005];bool used[1005];int main(){int t=1,a,b,x,y;while(~scanf("%d%d",&a,&b)){if(a<0&&b<0) break;if(a==0&&b==0){printf("Case %d is a tree.\n",t++);continue;}memset(used,0,sizeof(used));memset(in,0,sizeof(in));in[b]++;used[a]=true; used[b]=true;while(~scanf("%d%d",&x,&y),(x&&y)){used[x]=true; used[y]=true;in[y]++;}int rt=0,flag=0;for(int i=1;i<1005;++i){if(used[i]){if(in[i]>1){printf("Case %d is not a tree.\n",t++);flag=1;break;}else if(in[i]==0) ++rt;}}if(!flag){if(rt!=1) printf("Case %d is not a tree.\n",t++);else printf("Case %d is a tree.\n",t++);}}return 0;}
一个知识点不熟ce了一发。。。如果头文件都是<...h> 不可以加using namespace std;此时std会ce...
一般这样就好了...
#include<iostream>
using namespace std;
为了避免引入命名空间之后因重名带来的ce,可以使用如下姿势
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
0 0
- poj 1308 判断是否为一棵树
- POJ 1308 判断是否为一颗树
- 判断一棵树是否为二叉排序树
- [POJ 1308]Is It A Tree?(并查集判断图是否为一棵有根树)
- 判断一棵树是否为完全二叉树
- cc150:判断一棵树是否为平衡树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为AVL树
- 判断一棵树是否为完全二叉树
- 判断一棵树是否为二叉搜索树
- 判断一棵树是否为满二叉树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为完全二叉树
- 判断一棵树是否为完全二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为数字
- 判断是否为回文
- 判断是否为数字
- sql注入
- Vector erase 用法:删除指定元素
- SEO网站优化相关问答
- Android Fragment 真正的完全解析(上)
- 【洛谷 1355】神秘大三角
- poj 1308 判断是否为一棵树
- groovy优势:自定义动态Bean
- Jquery实现Ajax应用
- #UWP#导航(navigation)的实现
- unix/linux ls命令的实现
- JZOJ 3637. 【COCI2013】linije
- Eclipse JSP/Servlet 环境搭建
- python系列整理列表
- 高精度板( 无除法、减法 )