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 ...
随机推荐
- android 6.0 SDK中删除HttpClient的相关类的解决方法
一.出现的情况 在eclipse或 android studio开发, 设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http ...
- RedGate .NET Reflector注册问题(反注册)
Reflector分为桌面版和VS集成版本,当我们使用注册机注册的时候如果注册了Standvard版本,那么我们的VS就不能集成查看,也不能Debug,那么这 显然不是我们想要的,我们会选择重新注册, ...
- slf4j和log4j配置
SLF4J即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.按照官方的说法,SLF4J是一个用于日志系统的简单Fac ...
- POJ2309BST(树状数组)
BST Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9182 Accepted: 5613 Description C ...
- HD1281棋盘游戏(匹配+好题)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- [Angularjs]单页应用之分页
写在前面 在项目中,用到单页应用的分页,当时想到使用滚动加载的方案,可是几次尝试都没配置成功,闲着无聊就弄了一个demo. 系列文章 [Angularjs]ng-select和ng-options [ ...
- 织梦(dedecms) 5.7 /plus/car.php sql注入0day
测试方法: @Sebug.net dis本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! <?php $host=$argv[1]; $path=$argv[2]; $ ...
- 仿51job.com城市选择框特效
650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/att ...
- c3p0、dbcp<转>
<!--读取文件jdbc.properties --> <bean id="config" class="org.springframework.bea ...
- javascript 快速排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...