hdu 1272 小希的迷宫 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272
第二条并查集,和畅通工程的解法类似。判断小希的迷宫不符合条件,即有回路。我的做法是,在合并两个集合的时候,当fx = fy,即有共同祖先的时候,说明就有回路。
这题有三点要注意:1、格式问题。题目说的“每两组数据之间有一个空行。”是会PE的!!实际上输出Yes或No之后加多个\n即可,不需要再画蛇添足再输多一个换行。 2、 当整数对列表只有0 0 时,要输出Yes 3、当不相交的集合个数>=2时,也是不符合条件的,要输出No
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std; const int maxn = + ;
int set[maxn], flag[maxn];
int sign; int find_set(int x)
{
while (x != set[x])
x = set[x];
return x;
} void union_set(int x, int y)
{
int fx = find_set(x);
// printf("fx = %d\n", fx);
int fy = find_set(y);
// printf("fy = %d\n", fy);
if (fx != fy)
{
set[fx] = fy;
// printf("set[%d] = %d\n", fx, set[fx]);
}
else
sign = ;
} int main()
{
int a, b, i, j, cnt;
memset(set, , sizeof(set));
memset(flag, , sizeof(flag));
i = sign = ;
while (scanf("%d%d", &a, &b) && (a != - || b != -))
{
if (i == && a == && b == ) // i = 0代表列表中的数据是第一组
{
printf("Yes\n");
}
else if (a != && b != )
{
i++;
if (!flag[a] && set[a] != a) // flag的作用是输入数据时当存在多个相同的数据时,保证只需要存入一次set[a],起到类似监视哨的作用
{
set[a] = a;
flag[a] = ;
// printf("set[%d] = %d\n", a, set[a]);
}
if (!flag[b] && set[b] != b)
{
set[b] = b;
flag[b] = ;
// printf("set[%d] = %d\n", b, set[b]);
}
if (a > b)
swap(a, b); // 保证小的数指向的祖先比它大,其实这个判断不要也行
61 union_set(a, b); // 合并a、b元素,使a、b成为一个集合
}
else
{
for (cnt = , j = ; j < maxn; j++)
if (set[j] == j) // 统计不相交集合个数
cnt++;
if (cnt > ) // 不相交集合个数超过1个
sign = ;
if (sign)
printf("No\n");
else
printf("Yes\n");
memset(set, , sizeof(set));
memset(flag, , sizeof(flag));
i = sign = ;
}
}
return ;
}
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 小希的迷宫【并查集】
<题目链接> 小希的迷宫 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 Submi ...
- hdu 1272 小希的迷宫
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1272 小希的迷宫 (并查集)
小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...
- HDU 1272 小希的迷宫(乱搞||并查集)
小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有 ...
- HDU——1272小希的迷宫(并查集+拓扑排序)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
随机推荐
- Yii2.0 对数据库 查询的简单操作
User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->w ...
- BZOJ4034 T2
Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所 ...
- JSON前端页面解析
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更 ...
- 第二部分 Mongodb增删改查
学习内容:1.mongodb增加操作2.mongodb删除操作3.mongodb查询操作增删改查的高级应用Capped Collection(固定集合)GridFS 大文件上传或下载 1: inser ...
- Struts2拦截器的应用
拦截器类 public class AdminInterceptor extends AbstractInterceptor { private static final long serialVer ...
- 导入安全证书到jdk步骤详细说明-原
一.首先要在浏览器打开需要证书的网站,然后把证书下载下来,保存的证书名称随意命名,只要保证唯一性(这个唯一性下文有解释) 二.然后把证书复制到%JAVA_HOME%/jre/bin/路径下,即保证证书 ...
- linux kill信号列表
linux kill信号列表 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) ...
- 在spring中获取代理对象代理的目标对象工具类
昨天晚上一哥们需要获取代理对象的目标对象,查找了文档发现没有相应的工具类,因此自己写了一个分享给大家.能获取JDK动态代理/CGLIB代理对象代理的目标对象. 问题描述:: 我现在遇到个棘手的问题,要 ...
- Ubuntu nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
在Ubuntu 12中启动刚安装好的Nginx,报错: nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 原因如下: ...
- JSONKit 简单使用
http://blog.csdn.net/l_ch_g/article/details/8477187 例子上写的比较浅显易懂, 不过我还是稍微总结一下: 导入JSONKit.h之后 字符串转NSDi ...