pid=1325">职务地址

试想一下,在词和话题hdu1272是一样的。

可是hdu1272的博文中我也说了。数据比較水,所以我用非并查集的方法就AC了。

可是这题的数据没那么水,要用到并查集来解。这题的盲点和重点有这么几个:

  • 输入不是以-1 -1结束,而是以两个负数结束
  • 须要用并查集来推断是不是仅仅有一个“根”
  • 须要推断全部节点的入度是否大于1
  • 本题输入的格式。也要注意一下。
能够先忽略图中的方向的。由于假设有环的话,就变成图了。若严格的依照用parent数组来保存上一级父节点的方法,会有冲突。

比方这个图中,8的父节点有两个那么parent[8]应该怎样存储呢??所以我们能够把它看成无向图,无所谓父子。仅仅需把关系集合merge合并就好了。这样的有多个父节点的情况,就使用一个记录入度的数组来标记就好了。

#include<iostream>
using namespace std;
const int MAX=1000;
int rudu[MAX+10];//入度
int parent[MAX+10];
int root[MAX+10];//保存是否为根
bool flag = true;
int r=0;
int getParent(int a)
{
int k=parent[a];
if(parent[a]!=a)
{
parent[a]=getParent(parent[a]);
}
return parent[a];
}
void merge(int a,int b)
{
int p1=getParent(a);
int p2=getParent(b);
if(p1==p2)
return;
parent[p1]=p2;
root[p2]=1;
root[p1]=0;
}
void init()
{
r=0;
flag = true;
for(int i=0;i<=MAX;i++)
{
parent[i]=i;
rudu[i]=0;
root[i]=0;
}
} void main()
{
int a,b,c=1; init();
while(cin>>a>>b,a>=0&&b>=0)
{
if(!a&&!b)
{
for(int i=0;i<=MAX;i++)
{
if(rudu[i]>1)
flag = false;
if(root[i])
r++;
}
if(r>1)
flag=false;
if(flag)
cout<<"Case "<<c++<<" is a tree."<<endl;
else
cout<<"Case "<<c++<<" is not a tree."<<endl;
init();
continue;
}
if(getParent(a)!=getParent(b))
merge(a,b);
rudu[b]++;
}
}

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

hdu1325 Is It A Tree?并检查集合的更多相关文章

  1. HDU 1272 小希迷宫(并检查集合)

    意甲冠军:被判处无向图无环和连接无处不在 思考:并检查集合,trap 您可能有一个直接输入0 0 并且....合并的时候按某一个方向会爆栈,爆了好几次...下次考虑一下直接递归找祖先吧 #includ ...

  2. Reflection和Expression Tree解析泛型集合快速定制特殊格式的Json

    很多项目都会用到Json,而且大部分的Json都是格式固定,功能强大,转换简单等,标准的key,value集合字符串:直接JsonConvert.SerializeObject(List<T&g ...

  3. hdu1325 Is It A Tree? 基础并查集

    #include <stdio.h> #include <string.h> ], g[]; int find(int x) //并查集的查找,找到共同的父亲 { if (f[ ...

  4. NYOJ129 决策树 【并检查集合】

    树的判定 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 A tree is a well-known data structure that is either e ...

  5. URAL - 1966 - Cycling Roads(并检查集合 + 判刑线相交)

    意甲冠军:n 积分,m 边缘(1 ≤ m < n ≤ 200),问:是否所有的点连接(两个边相交.该 4 点连接). 主题链接:http://acm.timus.ru/problem.aspx? ...

  6. CodeForces 277A Learning Languages (并检查集合)

    A. Learning Languages time limit per test:2 seconds memory limit per test:256 megabytes The "Be ...

  7. HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. zoj 3659 并检查集合

    http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4882 现在在牡丹江,明天regional直播比赛,我会在一个月内退休.求祝福 ...

  9. uva 11987 Almost Union-Find (并检查集合)

    标题效果: 三操作. 1. 合并两个集合 2.代替所述第二组的第一个元素 3.输出设置数量,并.. IDEAS: 使用p该元素的记录数,其中集合,建立并查集. #include <cstdio& ...

随机推荐

  1. Rapha&#235;l 中文帮助文档(API)

    http://html5css3webapp.com/raphaelApi.htm

  2. 【web必知必会】—— 图解HTTP(转)good

    本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化 ...

  3. 启动和关闭JBoss As 7.1.1脚本

    启动和关闭JBoss As 7.1.1,脚本例如以下djboss.sh: #!/bin/sh #JBOSS_HOME JBOSS_HOME=/opt/jboss case "$1" ...

  4. asp.net mvc4中自定义404页面

    原文地址:http://www.chuchur.com/asp-net-mvc4-404/ 定义404 方法当然有很多种.不同的方法所展现的形式也不一样,用户所体验也不一样.以下提供2两种 方法一: ...

  5. Android 程序静态分析

    简介 静态分析是探索Android程序内幕的一种最常见的方法,它与动态调剂双剑合璧,帮助分析人员解决分析时遇到的各种“疑难”问题. 静态分析是指在不运行的情况下,采用词法分析.语法分析等各种技术手段对 ...

  6. VC++6.0版本号程序转成VS2010版

    直接转换的时候遇到两个问题: 1.预编译头文件*.PCH找不到 2.static_cast": 无法从"void (__thiscall CView2::* )(void)&quo ...

  7. 用XAML做网页!!—广告展示区

    原文:用XAML做网页!!-广告展示区 此次我们来进行广告展示区块的制作. 首先在Show区块中去掉原来设置的背景色,加入新的渐变背景设定: <Grid.Background> <L ...

  8. Unity3D入门(二):碰撞检測

    碰撞器由来 1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种 ...

  9. Spring——AOP配置时的jar包异常

    首先:这不是SSH整合的,这是单独配置Spring AOP的一个小例子. 所需要的jar包:如图: 我在这里出现的两个问题: 1.没有导入asm的jar包. 所报的异常为: java.lang.Cla ...

  10. Eclipse关闭检查

    有没有发现每次操作Eclipse过后,都会有build Workspace的操作一直在后台执行,JS校验一直validate,非常卡非常受不了有木有? 有木有?以下是我个人成功的步骤,曾经试过非常多次 ...