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 ...
随机推荐
- ASP.NET MVC 4 插件化架构简单实现-实例篇
先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集. 4.定义模板引擎的搜索路径. 5.在模板引擎的查找页面方 ...
- 完整实例(C# Socket)
问题描述: 现在创建一个C# Socket实例,客户端断开服务器能立刻输出断开连接客户端信息 服务器端断开,客户端能立刻察觉服务器状态 问题解决: 服务器端代码: 客户端代码: 以上 ...
- 2012 Asia JinHua Regional Contest
Draw Something http://acm.hdu.edu.cn/showproblem.php?pid=4450 o(n)统计输入每个数的平方和. #include<cstdio> ...
- EBP与ESP寄存器的使用
push ebp mov esp,ebp esp是堆栈指针 ebp是基址指针 这两条指令的意思是将栈顶指向ebp的地址 ---------------------------------------- ...
- Error: Exception in thread “main” java.lang.NoClassDefFoundError错误
Error: Exception in thread “main” java.lang.NoClassDefFoundError错误 检查文件名与类名是否一致 检查程序中main方法写的是否正确: p ...
- Happy Number
https://leetcode.com/problems/happy-number/ Write an algorithm to determine if a number is "hap ...
- ZOJ 2563 Long Dominoes(状压DP)
给定一个m*n的方格子,要求用3*1的骨牌去覆盖,骨牌可以用横放或者竖放,问最终有多少种放置方式,将其铺满. 分析:由于最多30行,每行最多9列,所以可以按行来dp,设计每行的状态从而进行转移,考虑每 ...
- hdu1102
http://acm.hdu.edu.cn/showproblem.php?pid=1102 最小生成树(模板题) 3 0 990 692 990 0 179 692 179 0 1 1 2 一共3个 ...
- PKUSC 模拟赛 day2 上午总结
今天上午考得不是很好,主要还是自己太弱QAQ 开场第一题给的图和题意不符,搞了半天才知道原来是走日字形的 然后BFS即可 #include<cstdio> #include<cstr ...
- cojs 香蕉 解题报告
啦啦啦,今天的考试题 不过原来考试题的n<=10w 由于我有更好的做法,所以我就改成20亿辣 本来先说一说考试题的正解做法的 但是复杂度是O(nlogm),实在是太渣了 所以还是说一说我的做法吧 ...