当前位置: 首页 > news >正文

NYOJ129 决策树 【并检查集合】

树的判定

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 4
描写叙述

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.

输入
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.

The number of test cases will not more than 20,and the number of the node will not exceed 10000.
The inputs will be ended by a pair of -1.
输出
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).
例子输入
6 8  5 3  5 2  6 4 5 6  0 0

8 1  7 3  6 2  8 9  7 5 7 4  7 8  7 6  0 0

3 8  6 8  6 4 5 3  5 6  5 2  0 0
-1 -1
例子输出
Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree.
来源
POJ
上传者
张云聪

题意:推断一个有向图是否是树。

题解:假设一个图是树。那么必须满足下面情况: 

1、树的数量不能大于1。空树也是树。

2、节点入度数不能大于1;

3、不能成环,比方一棵树的叶子节点指向根节点就是非法的;

4、自环是非法的。

#include <stdio.h>
#include <string.h>

#define maxn 10010

int pre[maxn];
bool vis[maxn];

int unionFind(int k){
	int a = k, b;
	while(pre[k] != -1) k = pre[k];
	while(a != k){
		b = pre[a];
		pre[a] = k;
		a = b;
	}
	return k;
}

int main() {
	// freopen("stdin.txt", "r", stdin);
	memset(pre, -1, sizeof(pre));
	int u, v, cas = 1, ok = 1, count = 0;
	while(scanf("%d%d", &u, &v) != EOF) {
		if(u < 0) break;
		if(!(u | v)) {
			printf("Case %d ", cas++);
			if(count > 1) ok = 0;
			if(ok) printf("is a tree.\n");
			else printf("is not a tree.\n");
			memset(pre, -1, sizeof(pre));
			memset(vis, 0, sizeof(vis));
			count = 0; ok = 1; continue;
		}
		if(!ok) continue;

		if(!vis[u]) {
			vis[u] = 1; ++count;
		}
		if(!vis[v]) {
			vis[v] = 1; ++count;
		}
		if(pre[v] != -1 || u == v) {
			ok = 0; continue;
		}
		u = unionFind(u);
		if(u == v) {
			ok = 0; continue;
		}
		pre[v] = u; --count;
	}
	return 0;
}


版权声明:本文博客原创文章,博客,未经同意,不得转载。

相关文章:

  • 关于 android百度地图 调用 地理位置 经纬度坐标,只调用一次的解决方法,通知栏不总是 搜索 GPS 。。。...
  • 最长公共子序列--动态规划算法
  • window.onload 与$(document).ready()的区别
  • 爱上OpenCL的十个理由
  • ionic之angular拦截器
  • 运行时间(Java版本)—转换毫秒到时分秒日期
  • hibernate_使用笔记
  • SharePoint 命令 安装、部署、回收、删除、更新 wsp包 (Solution)
  • Lisp-Stat 数据读取与绘图
  • 前后端分离了,然后呢?(转)
  • 向上取整和向下取整
  • oracle 抽取 对方大字段数据
  • Kubernetes初步
  • 谁是面向对象的设计霸主?(上)
  • Java 兑换ObjectC代码
  • [nginx文档翻译系列] 控制nginx
  • Date型的使用
  • IDEA 插件开发入门教程
  • IDEA常用插件整理
  • Mithril.js 入门介绍
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React的组件模式
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SQL 难点解决:记录的引用
  • v-if和v-for连用出现的问题
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 后端_ThinkPHP5
  • 基于游标的分页接口实现
  • 前端工程化(Gulp、Webpack)-webpack
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用agvtool更改app version/build
  • 字符串匹配基础上
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​人工智能书单(数学基础篇)
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (3) cmake编译多个cpp文件
  • (4)Elastix图像配准:3D图像
  • (AngularJS)Angular 控制器之间通信初探
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .Net 代码性能 - (1)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net7 环境安装配置
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET实现之(自动更新)
  • :如何用SQL脚本保存存储过程返回的结果集
  • @AliasFor注解
  • @RequestBody与@ModelAttribute
  • @WebServiceClient注解,wsdlLocation 可配置
  • [20171101]rman to destination.txt