【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集
给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边。
特殊地,对于 $1\le x\le n$ ,$(x,1)$ 和 $(x,m)$ 也视为相邻。但对于 $1\le y\le m$ ,$(1,y)$ 和 $(n,y)$ 不视为相邻。
现在这张网格图有 $k$ 个格子坏掉了,你需要判断剩下的部分是否形成一张无向无环连通图。
$n,m\le 10^9$ ,$k\le 10^5$ 。
题解
乱搞+并查集
对于剩下的图:点数为 $nm-k$ ,边数大于等于 $2nm-m-4k$ 。
由于剩下的部分是一棵树,因此有点数大于边数,即 $nm-k>2nm-m-4k$ 。
整理得 $(n-1)·m<3k$ 。
由于 $k$ 只有 $10^5$ ,因此 $(n-1)·m$ 只有 $3\times 10^5$ 。又因为 $n\le 3$ ,因此 $nm$ 也只有 $4.5\times 10^5$ 。
经过构造后得出最大的 $nm$ 在 $n=4,m=99999$ 时取到,为 $399996$ 。
因此当满足 $(n-1)·m<3k$ 时暴力(数组要开到 $449997$ 以上),否则输出No即可。时间复杂度 $O(449997T)$ 。
或当满足 $nm\le 400000$ 时暴力(数组要开到 $400000$ 以上),否则输出No即可。时间复杂度 $O(400000T)$ 。
#include <cstdio>
#include <cstring>
#define pos(i , j) ((i - 1) * m + j)
int v[450010] , f[450010];
int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
}
int main()
{
int T;
scanf("%d" , &T);
while(T -- )
{
memset(v , 0 , sizeof(v));
int n , m , k , i , j , x , y , c = 0;
scanf("%d%d%d" , &n , &m , &k);
if(1ll * n * m >= m + 3 * k)
{
while(k -- ) scanf("%*d%*d");
printf("No");
if(T) puts("");
continue;
}
for(i = 1 ; i <= k ; i ++ ) scanf("%d%d" , &x , &y) , v[pos(x , y)] = 1;
for(i = 1 ; i <= n * m ; i ++ ) f[i] = i;
for(i = 1 ; i <= n ; i ++ )
{
for(j = 1 ; j <= m ; j ++ )
{
if(!v[pos(i , j)])
{
if(i < n && !v[pos(i + 1 , j)]) f[find(pos(i , j))] = find(pos(i + 1 , j)) , c ++ ;
if(!v[pos(i , j % m + 1)]) f[find(pos(i , j))] = find(pos(i , j % m + 1)) , c ++ ;
}
}
}
if(c != n * m - k - 1) printf("No");
else
{
for(i = 1 ; i <= n * m ; i ++ )
if(!v[i])
x = find(i);
for(i = 1 ; i <= n * m ; i ++ )
if(!v[i] && find(i) != x)
break;
if(i <= n * m) printf("No");
else printf("Yes");
}
if(T) puts("");
}
return 0;
}
【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集的更多相关文章
- HDU 1272 小希的迷宫(乱搞||并查集)
小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有 ...
- 【uoj#209】[UER #6]票数统计 组合数+乱搞
题目描述 一个长度为 $n$ 的序列,每个位置为 $0$ 或 $1$ 两种.现在给出 $m$ 个限制条件,第 $i$ 个限制条件给出 $x_i$ .$y_i$ ,要求至少满足以下两个条件之一: 序列的 ...
- 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...
- Uoj #131. 【NOI2015】品酒大会 后缀数组,并查集
#131. [NOI2015]品酒大会 统计 描述 提交 自定义测试 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项, ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
- UOJ #142. 【UER #5】万圣节的南瓜灯 并查集
#142. [UER #5]万圣节的南瓜灯 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/142 Descrip ...
- 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)
题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...
- UOJ_14_【UER #1】DZY Loves Graph_并查集
UOJ_14_[UER #1]DZY Loves Graph_并查集 题面:http://uoj.ac/problem/14 考虑只有前两个操作怎么做. 每次删除一定是从后往前删,并且被删的边如果不是 ...
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
随机推荐
- 【Java字符序列】Pattern
简介 Pattern,正则表达式的编译表示,操作字符序列的利器. 整个Pattern是一个树形结构(对应于表达式中的‘|’),一般为链表结构,树(链表)的基本元素是Node结点,Node有各种各样的子 ...
- Vuex 单状态库 与 多模块状态库
之前对 Vuex 进行了简单的了解.近期在做 Vue 项目的同时重新学习了 Vuex .本篇博文主要总结一下 Vuex 单状态库和多模块 modules 的两类使用场景. 本篇所有代码是基于 Vue- ...
- Redis源码阅读(四)集群-请求分配
Redis源码阅读(四)集群-请求分配 集群搭建好之后,用户发送的命令请求可以被分配到不同的节点去处理.那Redis对命令请求分配的依据是什么?如果节点数量有变动,命令又是如何重新分配的,重分配的过程 ...
- CocoStuff—基于Deeplab训练数据的标定工具【四、用该工具标定个人数据】
一.说明 本文为系列博客第四篇,主要讲述笔者在正式使用该工具使用自定义标签标注自己的图片的过程. 二.数据整理 相信大家已经在 *占坑
- ActiveMQ笔记:管理和监控
ActiveMQ提供了比较丰富的监控和管理工具.在ActiveMQ的网页里(http://activemq.apache.org/how-can-i-monitor-activemq.html)提到了 ...
- XSS工具
1.BEEF KALI中启动BEEFXSS PAYLOAD为 <script src=”http://攻击机IP:3000/hook.js”></script> 将攻击代码插入 ...
- PHP 包含文件
1.require test123.php <?php $a=1; 运行文件: <?php require('test123.php'); echo 'Hello!'; echo '< ...
- jenkins展示report测试报告的配置
HTML报告展示 1. 需要HTML Publisher plugin插件 2. 在workspace下的工程(构建)中的目录中存储测试报告 在Jenkins中新建一个job,进入配置项. 首先通过p ...
- console.log() 替代函数
var log = console.log.bind(console); log('d')
- Scrum立会报告+燃尽图(Final阶段第三次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2481 项目地址:https://coding.net/u/wuyy694 ...