hdu 1272 使用set和并查集
http://acm.hdu.edu.cn/showproblem.php?pid=1272
这道题就是求图是不是连通无环,我觉得其实就是看看图是不是一棵最小生成树。
所以要是图满足条件,就必然有n个节点,n-1条边。但是题目中若只有 0 0一组数据也是可以的!!!!!这里WA了好多回。
所以我首先采用stl里面的set来直接判断:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
const int maxn = ;
int n, m; int main()
{
set<int> s;
int x, y;
int tot = ;
while (scanf("%d%d", &x, &y) == )
{
if (x == - && y == -) break;
if (x == && y == ) printf("Yes\n");//!!!特判一下!!!
else
{
tot++, s.insert(x), s.insert(y);//把点加入set,tot计录边的数目
for (int i = ;; i++) {
scanf("%d%d", &x, &y);
if (x == && y == ) {
if (s.size() == tot + )
printf("Yes\n");
else
printf("No\n");
s.clear();
tot = ;
break;
}
s.insert(x), s.insert(y);
tot++;
}
}
}
return ;
}
当然,原本的做法是用并查集,效率比set高很多:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
const int maxn=;
int n,m;
int f[maxn],flag[maxn]; int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
} int Union(int x,int y)
{
int rx=find(x);
int ry=find(y);
if (rx==ry){
return ;
}else{
f[rx]=ry;
return ;
}
} int main()
{
int x,y,t,Flag;
while(scanf("%d%d",&x,&y)==)
{
memset(flag,,sizeof(flag));
for (int i=;i<=maxn;i++) f[i]=i;
if (x==-&&y==-) break;
if (x==&&y==) printf("Yes\n");
else
{
Union(x,y);
flag[x]=,flag[y]=;//记录点已在图中
t=,Flag=;//开始存在一棵树。没有环。
while(scanf("%d%d",&x,&y)==)
{
if (x==&&y==) break;
if (flag[x]==){t++,flag[x]=;}//x是新节点,树+1
if (flag[y]==){t++,flag[y]=;}//y是新节点,树+1
if (Union(x,y)==) Flag=;//存在回路
else t--;//x,y合并,树-1
}
if (Flag&&t==) printf("Yes\n");
else printf("No\n");
}
}
return ;
}
hdu 1272 使用set和并查集的更多相关文章
- <hdu - 1272> 小希的迷宫 并查集问题 (注意特殊情况)
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 Problem Description: 上次Gardon的迷宫城堡小希玩了很久(见Probl ...
- HDU 1272 小希的迷宫 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质
小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...
- (step5.1.6)hdu 1272(小希的迷宫——并查集)
题目大意:输入一系列的点,判断这些点组成的图符不符合小希的思路(无环.连通) 解题思路: 1)如果两个节点的根节点相同,那么在这两个节点之间添加1条边以后,这个图肯定有环路. 2)孤立节点:被使用过& ...
- hdu 1257 小希的迷宫 并查集
小希的迷宫 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...
- HDU HDU1558 Segment set(并查集+判断线段相交)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1558 解题报告:首先如果两条线段有交点的话,这两条线段在一个集合内,如果a跟b在一个集合内,b跟c在一 ...
- hdu 3635 Dragon Balls(并查集应用)
Problem Description Five hundred years later, the number of dragon balls will increase unexpectedly, ...
- HDU 4496 D-City(逆向并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=4496 题意: 给出n个顶点m条边的图,每次选择一条边删去,求每次删边后的连通块个数. 思路: 离线处理删边,从后 ...
- HDU 3407.Zjnu Stadium 加权并查集
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- 关于 webpack的总结
一 . 几个基本的概念 1. mode开发模式 // webpack.production.config.js module.exports = { mode: 'production' // 生产模 ...
- 《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
近日,阿里云安全团队发布了<2018年云上挖矿分析报告>.该报告以阿里云2018年的攻防数据为基础,对恶意挖矿态势进行了分析,并为个人和企业提出了合理的安全防护建议. 报告指出,尽管加密货 ...
- echarts--例子
echarts使用例子: <script type="text/javascript"> option = { title : {'x': 'center','y':' ...
- MacBook安装QF9700网卡驱动
HOW TO USE A GENERIC USB ETHERNET ADAPTER QF9700 ON MAC OS X 20 February 2016 macOS Zahid Mahmood ...
- Javaweb Form表单查询
1.表单(form),是一种可以由用户输入,并提交给服务器端的一个图形界面,有如下性质: (1)表单中可以输入一些内容,这些输入功能由控件提供,叫做表单元素 (2)表单中一般都有一个按钮负责提交 (3 ...
- ActiveMQ消息中间件
最近学习到ActiveMQ,之前也没有用过相关或者类似的工具,因此特地写个文章进行相关的学习记录. 相关参考博文:https://www.cnblogs.com/cyfonly/p/6380860.h ...
- python 数字编码
- 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- 为什么我要使用Linux,使用Linux的十个理由。
Linux一来都是做为服务器运行,这些年来,Linux的图形界面已经有了很大的改善,Linux已经成为一个完善的,用户友好的桌面操作系统了,有非多常多的人在使用Linux,下面是我们认为最必要的10个 ...
- IntelliJ IDEA包层级结构显示方式
在开发的过程中,程序结构增多,通过树状结构看包结构目录,更加舒适. Idea默认情况下是不分层级展示包结构的 点击设置标志按钮,如下图所示 去掉Hide Empty Middle Packages的勾 ...