HDU 1272 小希的迷宫 (水题)
题意:
其实就是让你判断一个图是否为树,要求不能有孤立的点(没有这中情况),且只能有1个连通图,且边数+1=点数,且每个点都有边(不可能只有1个点出现)。
思路:
有可能出现连续的4个0,也就是有测试例子是完全没有点的,也没有边,要打印Yes!记录下所有点(去重),记录下每个点的度数,如果有n个点,n-1条边,且每点都是有边连着的,再判断其只有一个连通图就行了。因为只有n-1条边,所以当只有一个连通图时,必不会有环的产生。
判断是否只有一个连通图的方法:
(1)BFS(可用)
(2)DFS(有10万点,可能爆栈)
(3)并查集(可用)
(4)prim、kruscal生成一个树,所有点和所有边都要用上。
(5)Dijkstra、Bellman-Ford 求单点到其他点的路径长,如果有两点的路径为无穷则证明有点不可达。
#include <bits/stdc++.h>
using namespace std;
const int N=;
const int mod=0x7f7f7f7f;
int num[N];
/*
仅仅靠边数+点数来断定是否为树,应该是错的。测试数据:
1 2 3 4
3 5 4 5
0 0
*/
int main()
{
freopen("e://input.txt", "r", stdin);
int n, a, b;
while()
{
memset(num,,sizeof(num));
int cnt=, siz=;
while(scanf("%d%d",&a,&b),a+b>)
{
if(!num[a])
{
siz++; //点数
num[a]++;
}
if(!num[b])
{
siz++;
num[b]++;
}
cnt++; //边数
}
if(a==- && b==-) break;
if(!cnt||cnt+==siz) printf("Yes\n");
else printf("No\n"); }
return ;
}
AC的错误代码
#include <bits/stdc++.h>
using namespace std;
const int N=, mod=0x7f7f7f7f;
unordered_map<int,int> mapp;//将点编号映射到从1开始的连续的编号
int pre[N];
int find(int a) //查
{
int tmp=a;
while(pre[tmp]!=tmp) tmp=pre[tmp]; //找到a的祖先
pre[a]=tmp; //改其祖先
int p;
while(a!=tmp) //从a到tmp所经过的点,改其全部祖先
{
p=pre[a];
pre[a]=tmp;
a=p;
}
return tmp;
} void joint(int a,int b) //并
{
a=find(a);
b=find(b);
if(a!=b) pre[a]=b;
} void init() //初始化pre,不知道点个数,所以只能这样了
{
for(int i=; i<=N; i++) pre[i]=i;
} int istree(int n) //每个房间都是连着的
{
for(int i=; i<=n; i++) find(i); //防止漏网之鱼
for(int i=; i<n; i++) if(pre[i]!=pre[i+]) return ; //不是同个领导的
return ;
} int main()
{
freopen("e://input.txt", "r", stdin);
int n, a, b;
while()
{
memset(pre,,sizeof(pre));
mapp.clear();
init(); //初始化pre[]祖先列表
int cnt=, j=; while(scanf("%d%d",&a,&b),a>&&b>)
{
//cout<<"123"<<endl;
if(!mapp[a]) mapp[a]=++j; //重新编号
if(!mapp[b]) mapp[b]=++j; joint(mapp[a], mapp[b]);
cnt++; //边数
}
if(a==- || b==-) break; if(!cnt) printf("Yes\n"); //坑
else if(cnt+!=j) printf("No\n");//边多了肯定不行
else
{
if(istree(j)) printf("Yes\n");
else printf("No\n");
}
}
return ;
}
AC代码(并查集实现)
HDU 1272 小希的迷宫 (水题)的更多相关文章
- HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1272 小希的迷宫(并查集+最小生成树+队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1272 小希的迷宫 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集 ...
- HDU 1272 小希的迷宫 (并查集)
小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...
- hdu 1272 小希的迷宫【并查集】
<题目链接> 小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的 ...
- hdu 1272 小希的迷宫(java实现)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU——1272小希的迷宫(并查集+拓扑排序)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质
小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...
- HDU 1272 小希的迷宫 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1272 小希的迷宫
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- fork 函数 和vfork 函数的区别
问题描述: fork 函数 和vfork 函数的区别 问题解决: fork函数使用: 注: 以上printf 属于标准IO库带缓冲,如果标准输出链接到终端设备,则它是行 ...
- xargs 加 gm批量转换图片
%x50% @ ../-\ 南澳西涌_50%/@ 看了很多说明上都在用-i,这是一个已经废弃了的参数
- PHP流程控制的替代语法
准备做个wordpress的主题,结果看到了如下的语法: <div id="primary" class="content-area"><ma ...
- java poi导入EXCEL xls文件代码
/** * */ package com.bn.car.common.report.excel; import java.io.FileInputStream; import java.io.IOEx ...
- RFID开发笔记 Alien阅读器文档
1. 开机使用serial connect,完成boot后使用TCP/IP协议与主机通信 2.TagList,是一个活跃标签的列表,这里活跃的含义是在一个间隔里被监听到.如果一个标签之前没有被监听到, ...
- linux源码阅读笔记 jmpi指令(转)
jmpi是段间跳转指令,用于x86实模式下, 如:BOOTSEG = 0x0c70 jmpi 4, #BOOTSEG 假如当前段CS==00h,那么执行此指令后将跳转到段CS==0x0c70,当 ...
- ZOJ 3757 Alice and Bob and Cue Sports(模拟)
题目链接 题意 : 玩台球.Alice 和 Bob,一共可以进行m次,Alice 先打.有一个白球和n个标有不同标号的球,称目标球为当前在桌子上的除了白球以外的数值最小的球,默认白球的标号为0.如果白 ...
- 李洪强iOS开发之上传照片时英文改中文
今天在做项目的时候,有一个功能是上传照片选择系统相册的照片,或者拍照上传照片,但是页面上的文字是英文的, 需求想改成中文的,解决方法是在 info.plist里面添加 Localized resour ...
- 李洪强iOS学习交流群-iOS大神群
iOS学习大神群-群号:483959373
- Java学习笔记之:Java 继承
一.引言 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类 ...