红包是一个心灵手巧的男孩子。今天是万圣节,红包正在家里制作南瓜灯。

这时候一群熊孩子们敲开了红包家的门,他们高呼着“不用给糖,只要捣蛋”的口号把红包的南瓜灯弄坏了。这让红包很难过,于是他打算把这些被弄坏的南瓜灯做成其他的工艺品。

红包把它的南瓜灯划分成了 n×m 的网格,并用 (x,y) 表示第 x 行,第 y 列的格子。两个格子是相邻的当且仅当它们有一条公共边,特殊地, (x,1) 和 (x,m) 红包也视为是相邻的,但是他不把 (1,x) 和 (n,x) 当做是相邻的。

对于一个有 K 个格子被弄坏的南瓜灯,如果它能被制作成工艺品,当且仅当对于任意两个没有被弄坏的格子,都存在且仅存在一条连接它们的简单路径。一条简单路径定义为一个只包含没有被弄坏的格子的序列A1 至 An ,其中对于任意的 1≤i<n 都有 Ai 和 Ai+1 是相邻的,且每一个格子在序列中至多出现了一次。

现在红包有 T 个南瓜灯,他想让你帮他分别判断每一个南瓜灯能不能被做成工艺品。

输入格式

第一行一个正整数 T,表示南瓜灯数目。

对于每一个南瓜灯,第一行是三个整数 n,m,K,表示南瓜灯的大小和被弄坏的格子数。

接下来 K 行每行包含两个整数 x,y(1≤x≤n,1≤y≤m),表示第x 行第 y 列的格子被弄坏了。

数据保证 n,m≥3,0≤K<nm 且不会重复描述一个被弄坏的格子。

输出格式

对于每一个南瓜灯,输出一行,如果这个南瓜灯能被做成工艺品,那么输出 "Yes",否则输出 "No"。

样例一

input

3
3 3 4
2 1
2 3
3 1
3 3
3 3 5
1 1
1 2
2 1
3 1
3 2
3 3 4
1 1
2 2
2 3
3 3

output

No
Yes
No

explanation

对于第一组数据,(1,1) 到 (1,2) 有两条简单路径,分别是 (1,1),(1,2) 和 (1,1),(1,3),(1,2)。

对于第三组数据,(1,2) 到 (2,1) 不存在简单路径。

样例二

见样例数据下载。

限制与约定

对于所有数据,T≤10。

测试点编号 n,m 的规模 K 的规模
1 n,m≤4 K≤105
2 n,m≤100
3
4 n,m≤1000
5
6 n,m≤109 K≤1000
7
8 K≤105
9
10

时间限制:1s

空间限制: 256MB

经队友介绍了这个比赛的OJ,想看看题目难度。按这个easy round看了一下第一题,表示当时没细想被难住了。。。

这个题目就是给定一个类似迷宫的矩阵,有些地方是不能走的,左右边界看作连通,上下边界不连通,问能走的地方是不是任意两个格子有且只有一条路径连通。

当时一看数据我是傻了的。。这么大怎么搞。。

后来发现K最大100000是非常有用的,因为如果n * m大于400000的话,肯定输出的是No,因为对于这样一个左右连通的迷宫,必须有一整列是堵死的,不然左右肯定可以构成一条回路,就GG了,所以大于400000以上的直接输出No。

然后怎么表示迷宫呢,很简单,既然数不会大于400000,索性就开一个一维的数组来表示好了。一个block表示不能走的,一个vis表示走过的,任取一个可以走的点,进行DFS,只要发现DFS过程中出现重复走的情况,立刻判断是有回路的跳出,输出No,如果最后dfs完遍历的顶点并没有达到所有的没有阻碍的点的话,说明有两个点之间没有路径,也输出No,其他输出Yes

代码如下:

/*************************************************************************> File Name: A.cpp> Author: Zhanghaoran> Mail: chilumanxi@xiyoulinux.org> Created Time: Thu 03 Dec 2015 12:30:42 AM CST************************************************************************/#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#define pos(x, y) ((x - 1) * m + y)
using namespace std;int T;
long n, m, K;
long x, y;
int block[410000];
int vis[410000];
bool flag = false;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int all;
void dfs(int x, int y, int lx, int ly){if(vis[pos(x, y)]){flag = true;return ;}all ++;vis[pos(x, y)] = 1;for(int i = 0; i < 4; i ++){int tempx = x + dx[i];int tempy = y + dy[i];if(tempy == m + 1)tempy = 1;if(tempy == 0)tempy = m;if(tempx == 0 || tempx == n + 1 || block[pos(tempx, tempy)] || (tempx == lx && tempy == ly))continue;dfs(tempx, tempy, x, y);if(flag)return ;}
}int main(void){cin >> T;while(T --){cin >> n >> m >> K;if(n * m > 400000){for(int i = 0; i < K; i ++)scanf("%*d %*d");puts("No");continue;}flag = false;memset(vis, 0, sizeof(vis));memset(block, 0, sizeof(block));for(int i = 0; i < K; i ++){scanf("%d%d", &x, &y);block[pos(x, y)] = 1;}all = K;for(int i = 1; i <= n * m; i ++){if(!block[i] && !vis[i]){dfs((i - 1) / m + 1, (i - 1) % m + 1, -1, -1);break;}}if(all != n * m)flag = true;if(flag)puts("No");else puts("Yes");}return 0;
}

转载于:https://www.cnblogs.com/chilumanxi/p/5136045.html

UOJ UER#5 A 万圣节的南瓜灯相关推荐

  1. UOJ #142. 【UER #5】万圣节的南瓜灯 并查集

    #142. [UER #5]万圣节的南瓜灯 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/142 Descrip ...

  2. 【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集

    题目描述 给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边. 特殊地,对于 $1\le x\le n​$ ,$(x,1)​$ 和 $(x ...

  3. 万圣节习俗南瓜灯Jack-o’-lantern!

    万圣节前夕是美国人年年都会庆祝的秋季节日 .它的意思 是"神圣的夜晚",在每年的10月31日,也就是万圣节前夜.孩子们会制作万圣节的装饰品:各种各样桔黄色的南瓜灯. Hallowe ...

  4. 万圣节海报设计没有思路?看看这些有趣的万圣节狂欢是如何完成的!

    一整年的社交活动,万圣节即将来临. 在这个令人毛骨悚然的季节,没有什么比海报发现万圣节派对邀请更令人兴奋的了. 我们都有一个童年记忆,看到一个令人毛骨悚然的万圣节邀请,并想到我们即将参加的派对. 万圣 ...

  5. 退役前的最后的做题记录upd:2019.04.04

    考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...

  6. 小孩手工_儿童折纸大全_近150篇儿童手工折纸图解教程,小孩折纸必备 - 聚巧网...

    更新:2020-12-13 05:08 小兔子脸折纸教程,这个小兔子脸的折法步骤清晰是一个非常详细的折纸小兔子脸图解教程,如果你想学习怎么折纸小兔子脸,那跟着聚巧网小兔子脸折纸步骤学习吧! 标签:折纸 ...

  7. UOJ#454. 【UER #8】打雪仗

    UOJ#454. [UER #8]打雪仗 http://uoj.ac/problem/454 分析: 好玩的通信题~ 把序列分成三块,\(bob\)先发出这三块中询问点最多的一块给\(alice\). ...

  8. UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)

    题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...

  9. uoj#209【UER #6】票数统计

    题目 做UER的A题涨信心 首先我们注意到这个所谓的至少有一条正确在\(x\)和\(y\)不相等的时候非常弱,当\(x<y\)时,只有可能是后\(y\)位用户有\(x\)个通过:当\(x> ...

最新文章

  1. 使用Powershell批量为Azure资源添加Tags
  2. “===” 也有不靠谱的时候
  3. fastcopy会损坏硬盘_硬盘坏了数据可以修复吗?恢复技巧都在这!
  4. 三轴加速度传感器和六轴惯性传感器_一文读懂汽车MEMS惯性传感器的七大应用(上)...
  5. MBSA有关安全漏洞的检查说明一
  6. 1040 有几个PAT
  7. paip.c++ gcc 不能捕获exception异常的解决
  8. 如何自己开发FreeCAD的宏插件
  9. 使用matlab建立机器人雅克比矩阵
  10. 聚合数据--汇率接口调用
  11. 量化交易的十个知识点
  12. 讲一下 SVG... 吧
  13. avahi服务的使用
  14. EL表达式中比较String类型数字的大小
  15. 团队管理的四大挑战——用人篇
  16. RK3288 android 5.1 HDMI 喇叭同时输出声音
  17. 【论文分享】★★★「SOTA」小样本图神经网络分类模型 HGNN:Hybrid Graph Neural Networks for Few-Shot Learning
  18. 鱼那么信任水, 水却煮了鱼!
  19. 使用matlab读取gml网络数据
  20. 数仓知识12:PostgreSQL预写日志(WAL)和逻辑解码方案

热门文章

  1. DuiLib(3)——DuiLib与MFC嵌套攻略
  2. CRM 的通用JS函数库
  3. MySQL数据库迁移瀚高数据库
  4. MySQL——修改root密码的几种方法
  5. computer management.lnk未指定的错误
  6. java贪吃蛇游戏设计,成长路线图
  7. Debian deb文件打包及例程
  8. arima 公式_ARIMA
  9. 对话库克:商业具有周期性
  10. 基于Hadoop的大数据平台实施架构的规划