HDU 1272 小希的迷宫 (水题)

时间:2023-01-12 16:40:26

题意:

  其实就是让你判断一个图是否为树,要求不能有孤立的点(没有这中情况),且只能有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 小希的迷宫 (水题)的更多相关文章

  1. HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    ...

  2. hdu 1272 小希的迷宫(并查集&plus;最小生成树&plus;队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)     ...

  3. hdu 1272 小希的迷宫 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集 ...

  4. HDU 1272 小希的迷宫 (并查集)

    小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...

  5. hdu 1272 小希的迷宫【并查集】

    <题目链接> 小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的 ...

  6. hdu 1272 小希的迷宫(java实现)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. HDU——1272小希的迷宫(并查集&plus;拓扑排序)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  9. HDU 1272 小希的迷宫 并查集

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  10. hdu 1272 小希的迷宫

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 在&period;net中使用GAC

    转自:http://blog.log4d.com/2011/01/gac/ GAC GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的 ...

  2. PHP入门part1

    有人说php是世界上最好的语言,那它好在哪呢. 它是开源*的软件,能够在所有的操作平台上稳定的运行,入门比较简单.对于我这种没学过什么计算机语言的人是最好的起步点. PHP现在的含义:Hypetex ...

  3. Spring之我见

    Spring 是什么(1) •Spring 是一个开源框架. •Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. • ...

  4. mongo导出导入

    导出例子: mongoexport -d test -c test -q '{sn:1}' -o test.dat 导入例子: mongoimport -d test -c students stud ...

  5. XMind使用教程

    使用XMind,可以轻松创建.管理及控制思维导图.1. 启动XMind,选择一个空白模板或模板创建:2. 单击中心主题,输入文字即可对中心主题重命名:3. 使用键盘Enter键创建主要/同级主题,使用 ...

  6. Android中加载事件的方式

    Android中加载事件的方式 通过内部类的方式实现 通过外部类的方式实现 通过属性的方式实现 通过自身实现接口的方式实现 通过内部类的方式实现 Demo btn_Login.setOnClickLi ...

  7. 嵌入式linux&sol;android alsa&lowbar;aplay alsa&lowbar;amixer命令行用法

    几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: ll ...

  8. 一个App项目设计开发完整流程

    作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,这隔着一层语言也是多东西需要学习啊,一直对APP开发很感兴趣,最近请教了几个做移动开发的朋友,看了很多的资料,决定把自己学到的东 ...

  9. MySQL--localhost、局域网、外网访问MySQL

    安装环境: MySQL版本:mysql-installer-community-5.7.22.1.msi,64位 计算机:Windows7旗舰版,64位 本机的局域网IP为:192.168.2.230 ...

  10. 用jq实现鼠标移入按钮背景渐变其他的背景效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...