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?的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  3. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  4. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  5. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  6. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  7. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  8. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  9. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

随机推荐

  1. C#读取设置Cookie

    设置: HttpCookie cookie = new HttpCookie("cookieName"); cookie.Value = "name1" Htt ...

  2. Flash Builder4.6破解方案(亲测有效)(转)

    转自 http://bbs.9ria.com/thread-139463-1-1.html 当修改Host文件无法破解时,需要修改Flash Builder安装目录下某些文件来达到破解的目的,经网上搜 ...

  3. curl 使用简介

    Libcurl使用介绍: 四个关键函数: 1.      curl_easy_init() 初始化curl环境,新建curl对象,返回对象句柄,使用举例:    CURL *handler = cur ...

  4. delphi 提取字符中的数字

    Function Setstring(cString:string):string;   {提取数字} VAr   i:integer;   str:string;  begin    str:='' ...

  5. HW1.4

    public class Solution { public static void main(String[] args) { System.out.println("a a^2 a^3& ...

  6. 《Introduction to Algorithm》-chaper33-计算几何学

    叉积: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核心,计算机 ...

  7. iOS 设置connect超时

    NSLock *theLock; [theLock lock]; int fd, error; struct sockaddr_in addr; ))<) { cout<<" ...

  8. 【ACM/ICPC2013】树形动态规划专题

    前言:按照计划,昨天应该是完成树形DP7题和二分图.最大流基础专题,但是由于我智商实在拙计,一直在理解树形DP的思想,所以第二个专题只能顺延到今天了.但是昨天把树形DP弄了个5成懂我是很高兴的!下面我 ...

  9. Android UI--自定义ListView(实现下拉刷新+加载更多)

    Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...

  10. 学习并使用了两种linq to entity 的实现sql关键字in的查询方法

    //构造Lambda语句        private static Expression<Func<TElement, bool>> BuildWhereInExpressi ...