hdu1325 Is It A Tree?并查集
来源:互联网 发布:java编程思想 pdf 下载 编辑:程序博客网 时间:2024/05/08 01:36
题目地址
单看题目的话和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;elsecout<<"Case "<<c++<<" is not a tree."<<endl;init();continue;}if(getParent(a)!=getParent(b))merge(a,b);rudu[b]++;}}
2 1
- hdu1325&&poj1308 Is It A Tree? 基础并查集
- hdu1325 Is It A Tree?并查集
- HDU1325 Is It A Tree? 并查集
- HDU1325 Is It A Tree? 【并查集】
- hdu1325 Is It A Tree?(并查集)
- [并查集] hdu1325 Is it a tree ?
- 并查集 HDU1325-Is It A Tree?
- hdu1325 Is It A Tree? (并查集+森林)
- hdu1325 Is It A Tree?--并查集
- POJ1308/HDU1325/NYOJ129-Is It A Tree?,并查集!
- HDU1325:Is It A Tree?(并查集)
- 并查集模板题 HDU1325 Is It A Tree?
- HDU1325 Is It A Tree? + POJ1308 Is It A Tree?【并查集】
- hdu1325 Is It A Tree?(有向图并查集)
- HDU1325 Is It A Tree? 并查集入门|判树
- hdu1325 Is It A Tree?并差集实现
- Is It A Tree? hdu1325
- HDU1325 Is It A Tree?
- 阅读代码整洁之道->错误处理
- 2014 Multi-University Joint Training Round Beta
- Chapter06-FatMouse‘s Speed(ZOJ 1108)
- Python休眠、随机数
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- hdu1325 Is It A Tree?并查集
- FFmpeg SDK使用实例apiexample的分析
- ScrollView 之 实现视图的循环显示
- C++ vector::push_back 用法剖析
- 演练:ASP.NET控件实现 创建具有成员资格和用户登录功能的网站
- iOS网络编程(二) 自定义请求网络类----推荐用于需要请求过程片段数据
- VS2010 动态库开发演练:创建和使用动态链接库 (C++)(
- hdu 1863 畅通工程
- Java可变参数