L2-2 巴音布鲁克永远的土(二分+并查集)

news2024/11/29 13:40:34

思路:我们可以二分答案,然后判断当前答案合不合理。

对于判断答案合理,可以用并查集,看mid能否把所有检查点连进一个集合中,枚举每个结点,如何当前结点周围的四个方向可以连的话,就加进同一个集合,最后判断所有检查点是否是同一个祖先即可。

代码:

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
#define endl '\n'
#define pq priority_queue
using namespace std;
typedef pair<int,int> pii;
const int N = 1010;
int n, m;
int a[N][N], f[N * N];
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
vector<int>jc;
int id(int i, int j){
    return i * m + j;
}

int find(int x){
    if(x != f[x])
        f[x] = find(f[x]);
    return f[x];
}

bool check(int mid){
    for(int i = 0;i < n * m;i ++)f[i] = i;
    for(int i = 0;i < n; i++){
        for(int j = 0;j < m;j ++){
            for(int k = 0;k < 4;k ++){
                int x = i + dx[k], y = j + dy[k];
                if(x < 0 || y < 0 || x > n || y > m)
                    continue;
                if(abs(a[x][y] - a[i][j]) <= mid){
                    f[find(id(i, j))] = find(id(x, y));
                }
            }
        }
    }
    for(int i = 1;i < jc.size();i ++){
        if(find(jc[i]) != find(jc[i - 1]))
            return false;
    }
    return true;
}


void solve(){
    cin >> n >> m;
    for(int i = 0;i < n;i ++){
        for(int j = 0;j < m;j ++){
            cin >> a[i][j];
        }
    }
    for(int i = 0;i < n;i ++){
        for(int j = 0;j < m;j ++){
            int x;
            cin >> x;
            if(x)
                jc.push_back(id(i, j));
        }
    }
    int l = 0, r = 1e9 + 10;
    while(l + 1 != r){
        int mid = l + r >> 1;
        if(check(mid))
            r = mid;
        else
            l = mid;
    }
    cout << r;
}

signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t = 1;
    while(t--)
    {
        solve();
    }
    return 0;
}
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

host文件nginx代理 综合理解

之前一直理解得很糙 导致遇到问题很迷糊 今天经过大佬两句话讲明白了 特此记录 host文件 首先host做了代理 也就是对浏览器的DNS寻址做了拦截 具体原理可以参照当我们在地址栏输入URL的时候浏览器发生了什么 例如127.0.0.1 www.baidu.com 将 127.0.0.1 www.baidu.com 链接自…

DHCP抓包分析

DHCP动态路由配置协议&#xff0c;是C/S架构&#xff0c;由DHCP服务器为客户端动态分配IP信息。 DHCP客户端首次接入网络数据交互过程&#xff1a; 如何解决IP地址的冲突&#xff1a; ▫ DHCP服务器端&#xff1a;收到DHCP DISCOVER报文时&#xff0c;给客户端分配IP地址前会发…

有关NVIDIA 4090的pytorch版本安装心得

目录 1.查看版本2.安装对应版本的pytorch3.检测是否安装成功4.问题 1.查看版本 输入 nvidia-smi 查看GPU支持的cuda最高版本 如上图所示&#xff0c;你的GPU支持的最高CUDA版本便为12.2&#xff0c;所以你要安装CUDA版本不能高于该版本。安装版本不能太低&#xff0c;建议就小…

高阶流程图(SIPOC)

SIPOC高阶流程图是一种流程映射和改进方法&#xff0c;它使用可视化的方式描述一个或多个流程的输入和输出。SIPOC是五个单词的首字母缩写&#xff0c;分别代表供应商&#xff08;Suppliers&#xff09;、输入&#xff08;Inputs&#xff09;、过程&#xff08;Processes&#…

python使用概率算法模拟寻找伴侣

对于模拟寻找伴侣的问题,人在特定时期内能够遇见的异性是有限的,假设在某段时期内能够遇见的异性人数是n,那么问题在于在不能全面对n位候选人进行评估的情况下,以最大概率选中最好的那位。 假设n位候选人的水平用n个不同的数值表示,数值越大表示其水平则越高,问题在于,…

深入剖析Tomcat(一) 实现一个简单的Web容器

前言 在Java生态中&#xff0c;Tomcat的应用可谓经久不衰&#xff0c;众多Java Web应用都依赖它来进行部署。 虽然我们经常使用它&#xff0c;但是如果不深入了解的话&#xff0c;它对我们来说就一直是一个黑盒。就单纯的作为一个使用者来说&#xff0c;肯定也知道它内部应用…

Win10下安装Anaconda

Anaconda是可以便捷获取包且对包能够进行管理&#xff0c;同时对环境可以统一管理的发行版本&#xff0c;它包含了conda、Python在内的超过180个科学包及其依赖项。 安装Anaconda Anaconda官方下载网址&#xff1a;https://www.anaconda.com/download 官网页面中&#xff0c…

探究 ChatGPT 的心脏--Transformer(基础知识第一篇)

Transformer 是 ChatGPT 的核心部分&#xff0c;如果将 AI 看做一辆高速运转的汽车&#xff0c;那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年发表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型&#xff0c;诞生之后便一统江湖&#xff0c;在…

【考研数学】《660》+《880》高分搭配方法

&#x1f4dd;《660题》和《880题》高效刷题方法 1️⃣做题要有针对性&#xff0c;不要为了做题而做题 &#x1f4aa;660和880题虽然多&#xff0c;但是你不用全都做完&#xff0c;你可以把它当成是题源&#xff0c;里面的每一道题都很经典&#xff0c;如果搞懂一道&#xff…

51蓝桥杯之DS18B20

DS18B20 基础知识 代码流程实现 将官方提供例程文件添加到工程中 添加onewire.c文件到keil4里面 一些代码补充知识 代码 #include "reg52.h" #include "onewire.h" #include "absacc.h" unsigned char num[10]{0xc0,0xf9,0xa4,0xb0,0x99,…

最近一些前端面试问题整理

最近一些前端面试问题整理 4月8号1. TS 中的 类型别名 和接口的区别是什么&#xff1f;2. 什么是深拷贝和浅拷贝&#xff1f;深浅拷贝的方法有哪些&#xff1f;浅拷贝&#xff08;Shallow Copy&#xff09;深拷贝&#xff08;Deep Copy&#xff09;区别总结 3. 使用 JSON.strin…

如何在淘~宝接单和解决别人问题-java开发

如下这是一个连接&#xff1a;https://s.tb.cn/c.0vDtL3https://s.tb.cn/c.0vDtL3 解决各种问题。可付费咨询

炒股自动化:交易接口API才是重点,券商官方散户可用的接口

上一篇我们用get_full_tick取到了数据&#xff0c;也讲了变量和字典的基本概念&#xff0c;这次我们向交易所发送订单试试。前面文章的链接放在文末了&#xff0c;需要的可以看一下 这些内容是给新手看的&#xff0c;找接口的大佬们直接拉到文末即可 取市场数据的方法很多&am…

查询优化-ANY类型子连接提升

瀚高数据库 目录 文档用途 详细信息 文档用途 已知查询树基本结构的基础上&#xff0c;在一定条件下对SQL中的子连接提升&#xff0c; 详细信息 子连接提升流程 SQL: SELECT sname FROM student WHERE sno > ANY (SELECT sno FROM score);图1.1是该SQL对应的查询树&#…

代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录 目录 系列文章目录455.分发饼干贪心算法大饼干喂胃口大的&#xff08;先遍历胃口&#xff09;胃口大的先吃大饼干(先遍历饼干&#xff09;小饼干先喂胃口小的&#xff08;先遍历胃口&#xff09;胃口小的先吃小饼干&#xff08;先遍历饼干&#xff09; 376. 摆动序…

为什么在学校很难真正学好嵌入式?

10几年前,我是读电气工程专业,学了很多东西,结构,电机、绘图,plc等等.. 其实,都没什么鸟用,出来还是像个废物。 后面我自学转了单片机开发,说句难听点,自己买个开发板都比在学校学得深。 可能是这个专业的问题,主攻不是嵌入式方向,老师用汇编点个流水灯,这门课就…

第四百五十三回

文章目录 1. 问题描述2. 优化方法2.1 缩小范围2.2 替代方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取AppBar的高度"相关的内容&#xff0c;本章回中将介绍关于MediaQuery的优化.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 问题描述 我们在…

编程新手必看,python中条件控制语句学习(13)

介绍&#xff1a; Python3中的条件控制主要通过if、elif和else关键字来实现&#xff0c;它们用于根据条件执行特定的代码块。 if语句&#xff1a;这是最基本的条件控制结构。如果满足某个条件&#xff08;条件为True&#xff09;&#xff0c;则执行相应的代码块。在Python中&am…

Java学习42-Java 流(Stream)、文件(File)和IO - FileReader\FileWriter的使用

IO流 IO流的概述&#xff0c;分类等 Java程序中&#xff0c;对于数据的输入输出以stream方式进行&#xff0c;可以看作是一种数据的流动。 IO流中的IO是Input和Output的缩写&#xff0c;是非常实用的技术&#xff0c;用于处理设备之间的数据传输。读写文件&#xff0c;网络通…