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. hdu4280(最大流)

    传送门:Island Transport 题意:有N个岛屿 M条无向路 每个路有一最大允许的客流量,求从最西的那个岛屿最多能运用多少乘客到最东的那个岛屿. 分析:无向图正反都加弧,权值一样,这题点多, ...

  2. iOS 单元測试之XCTest具体解释(一)

    原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS-SDK具体解释专栏 http://blog.csdn.net/column/details/huang ...

  3. python 入门学习---模块导入三种方式及中文凝视

    Python 有三种模块导入函数 1. 使用import 导入模块 import modname : 模块是指一个能够交互使用,或者从还有一Python 程序訪问的代码段.仅仅要导入了一个模块,就能够 ...

  4. Android基于发展Service音乐播放器

    这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...

  5. cocos2d-x 贝塞尔曲线的简单运用(CCBezierTo,CCBezierBy)

    原文链接:http://blog.csdn.net/we000636/article/details/8616355 一.贝赛尔曲线简单介绍 贝塞尔曲线是应用于二维图形应用程序的数学曲线.曲线的定义有 ...

  6. 在Laravel中一步一步创建Packages

    首先要看一下Laravel官方文档,这是最新4.2的文档,假设想看中文的话点击此处,基本一样.这个github上的库setup-laravel4-package,也是一步一步介绍怎样创建一个包.并关联 ...

  7. Jersey框架二:Jersey对JSON的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  8. MongoDB--Getting Started with Java Driver

    原文链接 http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/  介绍 本文的目的是让你对怎样使用M ...

  9. uva 10066 The Twin Towers (最长公共子)

    uva 10066 The Twin Towers 标题效果:最长公共子. 解题思路:最长公共子. #include<stdio.h> #include<string.h> # ...

  10. Codeforces Round #253 DIV1 C 馋

    http://codeforces.com/contest/442/problem/C 题意非常easy,基本上肯定有坑坑洼洼的样子.看题目案例,从第三个跟第二个没有凹的案例来看的话,多写几个以及多画 ...