hdoj1325 Is It A Tree?
题意:
多组测试数据, 每组数据有多个数对, 表示一条有向边(即第一个数是第二个数的父节点), 以 0,0 为一组测试数据结束标志。当输入-1,-1时测试结束。 从那些给出的信息中判断是否是一棵树。
分析:
1、只可以有一个根节点, 也可以是一个点都没有的空树;
2、除了根节点, 每个点只有一个父节点。
3、因为只可以有一个父节点, 所以我们可以把一个合法的关系对(一个父亲节点与孩子节点对)合并到一个集合里, 他们的父节点都标记为所属树的根节点, 那样我们方便判断是否成环。
4、判断是否成环, 成环不可以。
5、 还有一个很衰的地方, 注意不光输入-1,-1 测试结束, 只要输入两个数都小于0就结束。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; const int N = ; int a, b, n, mi, mx, sum, flag, v[N], pre[N];
int find(int x)//寻找x所属的树的根节点
{
int r, i, j;
r = x; i = x;
while(r != pre[r])
r = pre[r];
while(pre[i] != r)
{
j = pre[i];
pre[i] = r;
i = j;
}
return pre[x];
}
int main()
{
n = ;
while(scanf("%d%d", &a, &b) != EOF)
{
memset(v, , sizeof(v));//记录所涉及的点
for(int i = ; i <= N; i++)
pre[i] = i;
if(a < && b < ) break;
else if(a == && b == )//特殊处理, 空树
{
printf("Case %d is a tree.\n", ++n);
continue;
}
pre[b] = a;
v[a] = ;
v[b] = ;
mi = min(a, b);
mx = max(a, b);
flag = ;
while(scanf("%d%d", &a, &b) != EOF)
{
if(a == && b == ) break;
if(mx < a || mx < b) mx = max(a, b);
if(mi > a || mi > b) mi = min(a, b);
v[a] = ;
v[b] = ;
if(flag == )
{
int fx = find(a);
int fy = find(b);
if((fy != b) || (fy == fx))//若构成环, 或孩子节点已经有父节点了, 那就是不合法的边
flag = ;
else if(fy == b && fy != fx)//如果不构成环并且没有父亲节点, 那就是合法的, 加入
pre[b] = fx;
}
}
int sum = ;
if(flag == )
{
for(int i = mi; i <= mx; i++)//判断是否存在多棵树
{
if(v[i] == )
{
int fx = find(i);
if(fx == i)
{
sum++;
if(sum > )
{
flag = ;
break;
}
}
}
}
}
if(flag == )
printf("Case %d is a tree.\n", ++n);
else if(flag == )
printf("Case %d is not a tree.\n", ++n);
}
return ;
}
hdoj1325 Is It A Tree?的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
随机推荐
- codeforces 652E Pursuit For Artifacts 边双连通分量
题意:n个点,m条边的无向图,有的边上有标记,每条边只能走一次 给你一个起点,一个终点,询问是否能找到从起点到终点的路径,这条路径至少包含一条含有标记的边 分析:然后边双缩点 下面介绍一下边双的性质 ...
- bzoj 1975 [Sdoi2010]魔法猪学院(k短路)
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- E297: Write error in swap file解决方法
vi打开配置文件后显示E297: Write error in swap file,检查磁盘发现磁盘满了.使用du –max-depth=1 | sort –n –r 查找大文件所在位置并删除.
- Oracle10g/11g 在SUSE/RHEL上的安装与配置
在过去对众多项目的支撑过程中,Oracle作为首选数据库,其安装与配置过程成了重复性最多的工作之一.在此,我进行了总结,并分享出来,希望能对大家有所帮助.随着Oracle版本的提升,从9i -> ...
- pm 2.5
定陵</a></div><div class="staaqi"><span class="label pmsmall" ...
- 分布式搜索Elasticsearch增、删、改、查操作深入详解
引言: 对于刚接触ES的童鞋,经常搞不明白ES的各个概念的含义.尤其对“索引”二字更是与关系型数据库混淆的不行.本文通过对比关系型数据库,将ES中常见的增.删.改.查操作进行图文呈现.能加深你对ES的 ...
- HTML---Android与js交互实例
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- HTML5 Canvas动画效果演示
HTML5 Canvas动画效果演示 主要思想: 首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间 间隔绘制不同的帧,这样看起来就像动画在播放. 关键技术点: ...
- UVa465 - Overflow
题目地址:点击打开链接 C++代码: #include <cstdlib> #include <cstdio> int main() { char s1[10000],s2[1 ...
- PERCONA-TOOLKIT 工具的安装与使用1
-c times Sun Jul :: CST Tracing process ID total pread read pwrite write fsync open close lseek fcnt ...