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 ...
随机推荐
- jqGrid 属性、事件全集
<html> ... <table id="list1"></table> <div id="pager1">& ...
- 如何修改MyEclipse的SVN账户和密码
如何修改MyEclipse的SVN账户和密码呢? 操作方法:删除C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple文件夹 ...
- 安装office2016时弹出microsoft setup bootstrapper已停止工作的解决办法
安装office2016时安装进度条走到最后又回滚,弹出microsoft setup bootstrapper已停止工作,最后“安装出错” 经过了1天的试尽了各种控制面板卸载.文件夹删除.offic ...
- ES6学习笔记之Symbol
新的数据类型Symbol 1. 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与 ...
- Thinkphp 架构笔记
多个模块的时候,公共模块Common必须和其他模块放在同一个目录下,否则拓展配置“LOAD_EXT_CONFIG”会无效
- HDU2056
/* * 指数型母函数 */ #include<cstdio> #define mod 100 typedef long long LL;//杭电需用int64 int powerMo ...
- Excel 表格中根据某一列的值从另一个xls文件的对应sheet中查找包含其中一列的内容(有点拗口)
=VLOOKUP(C3&"*",INDIRECT("'[2008-2016年三地商务明细表.xls]"&L3&"年北京'!$D ...
- CesiumLab V1.2 新功能 倾斜数据处理
一转眼又是一周的时间,我们的实验室功能又强大了. 照旧我们先放毒,放图,图,太晚了,字都敲不到一起了 lod以及包围盒 大雁塔实例,按楼层单体化 倾斜数据处理参数设置 简单介绍一下 Ces ...
- Java 类与类之间的调用
方法1. 新建一个类. 然后在调用类中先进行被调用类实例化,然后通过实例化的对象访问. 例如: //先定义一个类 import static java.lang.System.out; public ...
- linux挂载点 和 文件系统$ mount$ cat /etc/fstab$ vgs$ pvs$ lvs$ df -h$ lsof +D / /* beware not to kill your box */
$ mount$ cat /etc/fstab$ vgs$ pvs$ lvs$ df -h$ lsof +D / /* beware not to kill your box */ 一共挂载了多少文件 ...