并查集,是否成树,Poj(1308)
思路:
对于每一条新的边的两个端点,是否是属于一颗树,要是的话,就不是一颗树。否则,就合并。
这里要注意的是,不能是森林,我这里WA了两次了。只不过在最后,查看每个节点的祖先是否是同一个就可以了。
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- const int maxn = ;
- int father[maxn];
- bool vis[maxn];
- int Find_set(int x)
- {
- if(x!=father[x])
- father[x]=Find_set(father[x]);
- return father[x];
- }
- void Union(int x,int y)
- {
- father[y] = x;
- }
- int main()
- {
- bool flag;
- int x,y;
- int t=;
- while(scanf("%d%d",&x,&y),x!=-)
- {
- flag=true;
- if(x==&&y==)
- {
- printf("Case %d is a tree.\n",++t);
- continue;
- }
- else {
- for(int i=;i<maxn;i++)
- {
- father[i] = i;
- vis[i] = false;
- }
- int first = x;
- vis[x]=vis[y]=true;
- if(Find_set(x)==Find_set(y))
- flag=false;
- else Union(x,y);
- while(scanf("%d%d",&x,&y),x!=)
- {
- vis[x]=vis[y]=true;
- int fx=Find_set(x);
- int fy=Find_set(y);
- if(fx==fy)
- flag=false;
- else Union(fx,fy);
- }
- for(int i=;i<maxn;i++)
- {
- if(vis[i]&&Find_set(first)!=Find_set(i))
- {
- flag=false;
- break;
- }
- }
- if(flag)
- printf("Case %d is a tree.\n",++t);
- else printf("Case %d is not a tree.\n",++t);
- }
- }
- return ;
- }
并查集,是否成树,Poj(1308)的更多相关文章
- 并查集判树 poj 1308
例题: poj 1308 题目大意比较简单,对任意两个点,有且仅有一条道路,也就是一棵树. 题解:一棵树中,肯定是不能有环的,而且只能由一个根节点.(没认真读题,只知道在那里判环....),所以这个题 ...
- POJ 1308&&HDU 1272 并查集判断图
HDU 1272 I - 小希的迷宫 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- (并查集)POJ 1308 & HDU 1325
一开始以为两道题是一样的,POJ的过了直接用相同代码把HDU的交了,结果就悲剧了.最后发现HDU的没有考虑入度不能大于一. 题意:用树的定义来 判断吧,无环,n个结点最多有n-1条边,不然就会有环.只 ...
- POJ 1308/并查集
题目链接 /* 判断一棵树: * 1.There is exactly one node, called the root, to which no directed edges point. * 2 ...
- Is It A Tree? POJ - 1308(并查集判树)
Problem Description A tree is a well-known data structure that is either empty (null, void, nothing) ...
- poj 并查集
http://poj.org/problem?id=1611 水题 题意:就是找一共有多少个人感染了,0是感染学生的编号. #include <stdio.h> #include < ...
- [并查集] POJ 1703 Find them, Catch them
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43132 Accepted: ...
- [并查集] POJ 2236 Wireless Network
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 25022 Accepted: 103 ...
- poj 1797(并查集)
http://poj.org/problem?id=1797 题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货. 输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物. 思路 ...
随机推荐
- 设置Linux shell超时自动退出
Linux shell,一般默认情况下是不会超时退出的,但是有的时候我们想要让它在多少分钟后没有操作自动退出终端(听起来有点像windows多少分钟后自动锁屏一样).我们可以通过设置来实现这一功能. ...
- Python 内置的GUI库tkinter方法在py2和py3中的更改
参考资料: https://docs.python.org/3.4/library/tkinter.html#tkinter-moduleshttps://docs.python.org/2.7/ ...
- thinkPHP Model的操作
1.建立一个表 create table Demo( -> id int, ), -> age int, ) -> ); 2.新增数据 2.1面向过程的风格 $d = $a-> ...
- LBS开发
功能:用户发送自动的位置,返回周围的厕所信息 思路:根据用户的经纬度信息,调用百度地图的api,查询周围的厕所位置并且返回! 步骤:进入百度地图官网注册账号,选择web api接入 我们先看开发者文档 ...
- java——链表映射 LinkedListMap
好像也不是基于链表来实现的,而是采用与链表类似的节点形式重新定义了一个节点内部类,以此来实现映射 public class LinkedListMap<K, V> implements M ...
- 安装NetCDF及HDF5
平台信息 Description: CentOS Linux release 7.6.1810 (Core) 安装步骤 下载NetCDF.HDF5.zlib.curl[使用wget命令即可] 解包:t ...
- 性能测试工具LoadRunner20-LR之Controller Service-Level Agreement(服务水平协议)
SLA是为负载测试场景定义的具体目标.例如,评测脚本中任意数量事务的平均响应时间,可以定义具体的目标或阈值.测试运行结束之后,LR将你定义的目标与实际录制的平均事务响应时间进行比较.如果实际的平均事务 ...
- 《nginx 五》nginx实现动静分离
Nginx+Tomcat动静分离 动态页面与静态页面区别 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. 什么是动 ...
- sqlldr 采集中文数据乱码问题
测试机上装入数据 发现中文字段全部变成???????,初步判断为字符集问题 更改 UPDATE sys.props$ SET VALUE$='WE8ISO8859P1' ...
- C#天气预报程序
首先要引用这个服务,http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 出现对话框后,把中央气象的服务网址添加到里面 选择高级, 添 ...