LibreOJ - 10015 扩散

2023-05-16

题目描述

一个点每过一个单位时间就会向 4 个方向扩散一个距离,如图所示:两个点 a 、b 连通,记作 e(a,b),当且仅当 a 、b 的扩散区域有公共部分。连通块的定义是块内的任意两个点 u、v 都必定存在路径 e(u,a0),e(a0,a1),…e(ak,v)。

给定平面上的 n 个点,问最早什么时候它们形成一个连通块。

输入格式

第一行一个数 n ,以下 n 行,每行一个点坐标。

输出格式

输出仅一个数,表示最早的时刻所有点形成连通块。

样例

Input Output
2
0 0
5 5
5

数据范围与提示

对于 20% 的数据,满足 1≤n≤5,1≤Xi,Yi≤50;

对于 100% 的数据,满足 1≤n≤50,1≤Xi,Yi≤10^9。

思路:

连通块,想到用并查集。求解扩散形成连通块的最早时间,在0-1e9内用二分搜索。因为扩散是所有点同时进行,所以对于任意两点,判断2*t>=abs(x[i]-x[j])+abs(y[i]-y[j])就可知这两点是否直接相联系,若联系就录入并查集。

代码:

#include <bits/stdc++.h>
#define N 1e9	//10亿 
using namespace std;

long long int x[55],y[55];
int dat[55];
int n;

int find(int p){
	if(dat[p]==p) return p;
	else return find(dat[p]);
} 

bool conn(int t){
	//并查集初始化
	for(int i=1;i<=n;i++){
		dat[i]=i;
	}
	
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(2*t>=abs(x[i]-x[j])+abs(y[i]-y[j])){
				int a=find(i),b=find(j);
				if(a!=b) dat[a]=b;	//若根不同则置换 
			}
		}
	}
	
	//形成连通块之后应该只有一个根
	int root=0;
	for(int i=1;i<=n;i++){
		if(dat[i]==i) root++;
	}
	
	if(root==1) return true;
	else return false;
}


int main() {
	
	cin>>n;
	
	if(n==1){
		cin>>x[0]>>y[0];
		cout<<0;
		return 0;
	} 
	
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i];
	}
	
	
	int l=0,u=N,ans;
	//二分搜索答案
	while(l<=u){
		int m=(l+u)/2;
		
		if(conn(m)){
			u=m-1;
			ans=m;
		} 
		else l=m+1;
	} 
	
	printf("%d",ans);
	return 0;
	
	
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LibreOJ - 10015 扩散 的相关文章

随机推荐

  • matlab中interp2双线性插值算法的实现原理及使用python简单实现双线性插值interp2算法

    双线性插值算法基本原理 双线性插值算法的基本原理 xff1a 图1 双线性插值示意图 图中绿色的点P为待插值得到的点 xff0c 对点P进行插值需要用到Q11 x1 y1 Q12 x1 y2 Q21 x2 y1 Q22 x2 y2 的值 x
  • Linux 运行shell文件,出现 $‘\r‘: command not found

    运行编写的shell脚本时 xff0c 出现了 r command not found 这样的错误提示 报错的原因是我们在windows系统操作时 xff0c 编辑器里的换行符是 r n xff0c 而Linux上为 n xff0c 两个系
  • [Swoole] 在Ubuntu下安装、快速开始

    本文主要讲述在 Ubuntu 下编译安装 Swoole xff0c 并根据官方文档给出的demo进行了测试和搬运 xff0c 包括 xff1a TCP服务器 UDP服务器 HTTP服务器 WebSocket服务器 异步客户端 定时器和协程相
  • C++ 快速幂取模算法

    快速求 b p k的值 1 模运算与乘法的性质 乘积取模可以在乘之前先取模 x y d 61 x d y d d 比如 xff1a a a c 61 a c a c c 2 本题公式 当 b为偶数时 xff1a ab mod c 61 a2
  • [Python] socket实现TFTP上传和下载

    Python socket实现TFTP上传和下载 一 说明二 TFTP协议介绍 xff08 参考网络 xff0c 详情可搜索 xff09 2 1 特点 2 2 TFTP下载过程分析 xff1a 2 3 TFTP操作码与数据格式 xff1a
  • [Python] 通过采集两万条数据,对《无名之辈》影评分析

    一 说明 本文主要讲述采集猫眼电影用户评论进行分析 xff0c 相关爬虫采集程序可以爬取多个电影评论 运行环境 xff1a Win10 Python3 5 分析工具 xff1a jieba wordcloud pyecharts matpl
  • [Python] 用python做一个游戏辅助脚本,完整思路

    一 说明 简述 xff1a 本文将以4399小游戏 宠物连连看经典版2 作为测试案例 xff0c 通过识别小图标 xff0c 模拟鼠标点击 xff0c 快速完成配对 对于有兴趣学习游戏脚本的同学有一定的帮助 运行环境 xff1a Win10
  • cp命令 复制多个目录/文件夹下文件到指定目录

    可以使用cp命令的通配符和递归选项来复制多个目录下多个文件夹下的文件到指定目录 如果目标目录不存在 xff0c 可以使用 mkdir p命令来创建目录 p 选项表示递归创建目录 xff0c 如果目录已经存在 xff0c 则不会报错 例如 x
  • 网络安全传输系统(3)—OpenSSL加密传输

    1 基本介绍 1 1 未加密传输的安全弊端 如果在网络传输中没有加密 xff0c 就是以明文传输 传输的数据可以被抓包软件直接截获 xff0c 并能读取里面的数据 1 2 加密基本原理 对称加密 xff1a 对称加密指的就是加密和解密使用同
  • 网络安全传输系统(4)—线程池优化

    服务器单发模式 初始化 gt 等待连接 gt 处理请求 gt 关闭连接 gt 再次等待连接服务器并发模式 初始化 gt 等待连接 gt 交给子进程处理请求 gt 再次等待连接单发服务器不能同时处理多个客户端请求 xff0c 并发服务器则可以
  • 网络安全传输系统(5)—账号管理子系统设计

    1 登录模块设计 输入用户名和密码根据用户名从数据库提取密码比较用户输入密码和数据库提取密码 xff0c 以决定是否登录成功 2 编译客户端程序 arm linux gcc L 008 openssl 1 0 0s install lib
  • C语言实例—一个数如果恰好等于它的因子之和,这个数就称为完数。(gcc编译)

    1 题目 一个数如果恰好等于它的因子之和 xff0c 这个数就称为完数 例如 xff0c 6的因子是1 xff0c 2 xff0c 3 xff0c 而6 61 1 43 2 43 3 xff0c 因此6为完数 编程序找出1000之内所有的完
  • C语言实例—输入两个正整数m和n,求其最大公约数和最小公倍数(gcc 编译)。

    1 辗转相除法 辗转相除法是古希腊求两个正整数的最大公约数的 xff0c 也叫欧几里德算法 xff0c 其方法是用较大的数除以较小的数 xff0c 上面较小的除数和得出的余数构成新的一对数 xff0c 继续做上面的除法 xff0c 直到出现
  • Linux线程详解

    并行和并发的区别 1 并发 concurrency xff1a 在操作系统 中 xff0c 是指一个时间段中有几个程序都处于已启动运行到运行完毕之间 xff0c 且这几个程序都是在同一个处理机上运行 其中两种并发关系分别是同步 和互斥 xf
  • 数据结构—带头结点的单循环链表

    1 基本操作 循环链表的特点是最后一个元素的指针域指向头结点 因此对于循环链表的初始化 xff08 设表的头结点是L xff0c 不再是L gt next 61 NULL xff0c 而是L gt next 61 L 循环链表为空时 xff
  • 数据结构—有序表的合并

    1 有序表合并 问题描述 xff1a 已知线性表La 和Lb中的数据元素按值非递减 有序排列 xff0c 现要求将La和Lb归并为一个新的线性表Lc xff0c 且Lc中的数据元素仍按值非递减有序排列 例如 xff1a La 61 1 7
  • 数据结构—习题2.6 通过一趟遍历找出单链表中的最大值

    1 题目描述 设计一个算法 xff0c 通过一趟遍历在单链表中确定值最大的结点 2 题目分析 假定第一个结点中数据具有最大值 xff0c 依次与下一个元素比较 xff0c 若其小于下一个元素 xff0c 则设其下一个元素为最大值 xff0c
  • 【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题

    1 查看状态 通过 show variables 命令查看当前 mysql 是否是区分大小写 xff0c 如下 xff1a mysql大小写敏感配置相关的两个参数 xff0c lower case file system 和 lower c
  • Ubuntu配置阿里云ddns

    首发于yuany3721的WordPress 生成阿里云access key 注意 xff1a 不能使用ram子用户 下载并配置ddns curl https github com NewFuture DDNS releases downl
  • LibreOJ - 10015 扩散

    题目描述 一个点每过一个单位时间就会向 4 个方向扩散一个距离 xff0c 如图所示 xff1a 两个点 a b 连通 xff0c 记作 e a b xff0c 当且仅当 a b 的扩散区域有公共部分 连通块的定义是块内的任意两个点 u v