最小生成树+思维 扩散(洛谷 P1661)

2023-05-16

扩散

题目描述

一个点每过一个单位时间就会向四个方向扩散一个距离,如图。

图略

两个点a、b连通,记作e(a,b),当且仅当a、b的扩散区域有公共部分。连通块的定义是块内的任意两个点u、v都必定存在路径e(u,a0),e(a0,a1),…,e(ak,v)。

输入格式

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

输出格式

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

输入输出样例平面上的n给点,问最早什么时刻它们形成一个连通块。


首先要知道两点的最短时间成连通块就是两点的哈曼顿距离,这是最关键的;
然后就是求这n个点的最小生成树的最长边;

代码:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=100100;
const int M=2000100;
const int mod=1e9;
int head[N],cnt,n,x[100],y[100],fa[100];
struct Node{
	int fa,sn,w;
}edge[N*2];
void add(int p,int q,int w){
	edge[cnt].fa=p;
	edge[cnt].sn=q;
	edge[cnt].w=w;
	cnt++;
}
bool cmp(Node p,Node q){return p.w<q.w;}
int find(int p){
	if(p==fa[p]) return p;
	return fa[p]=find(fa[p]);
}
int krus(){
	sort(edge,edge+cnt,cmp);
	int tot=0,ans=0;
	for(int i=0;i<cnt;i++){
		if(find(edge[i].fa)!=find(edge[i].sn)){
			tot++;
			fa[find(edge[i].sn)]=find(edge[i].fa);
			ans=max(edge[i].w,ans);
		}		
		if(tot==n-1) break;
	}
	return ans;
}
int main(){
	memset(head,-1,sizeof(head));
	cin>>n;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			int d=abs(x[j]-x[i])+abs(y[j]-y[i]);
			d=(d+1)/2;
			add(i,j,d),add(j,i,d);
		}
	}
	cout<<krus()<<endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最小生成树+思维 扩散(洛谷 P1661) 的相关文章

  • 洛谷——P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt
  • 最小生成树 Kruskal算法 Prim算法 洛谷P3366

    最小生成树 Kruskal算法 Prim算法 洛谷P3366 相较于Prim算法 xff0c 我觉得Kruskal算法更优 xff08 因为一般情况 xff0c 题目给你的边数都是正常的 xff0c Kruskal算法的时间复杂度为O El
  • 洛谷 P3366 【模板】最小生成树

    洛谷 P3366 模板 最小生成树 题目 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 题目链接 模板 最小生成树 洛谷 输入 第一行包含两个整数N M xff0c 表示该图共有N个结点和
  • 最小生成树 prim算法(附代码)

    prim算法是以一个根节点开始慢慢往下延伸 xff0c 不断寻找距生成树最短的距离的节点 xff0c 然后将该节点纳入生成树的集合中 xff0c 然后再将该节点影响的其他未纳入生成树节点的距离更新 xff08 缩小与生成树的距离 xff09
  • 最小生成树+思维 扩散(洛谷 P1661)

    扩散 题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 图略 两个点a b连通 xff0c 记作e a b 当且仅当a b的扩散区域有公共部分 连通块的定义是块内的任意两个点u v都必定存在路径e u a0 e
  • 洛谷 P3366 【模板】最小生成树 (题解+代码)

    题目传送门 xff1a https www luogu com cn problem P3366 题解 xff1a 利用Kruskal算法求解 xff0c 这里大致说下Kruskal算法 对于一个点数为n的生成树而言 很显然 xff0c 想
  • 洛谷P3366 【模板】最小生成树.Prim算法

    题目 xff1a https www luogu com cn problem P3366 普利姆算法 xff1a 每次选 与已选的点相连的 最小边 循环n 1次 C语言 xff1a include lt stdio h gt includ
  • 【Luogu P1661】扩散

    题目 xff1a 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 两个点 a b 连通 xff0c 记作 e a b 当且仅当 a b 的扩散区域有公共部分 连通块的定义是块内的任意两个点 u v 都必定存在路径 e u
  • 【洛谷 3366】最小生成树_Prim

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt 61 50
  • P1661 扩散

    P1661 扩散 题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 两个点a b连通 xff0c 记作e a b 当且仅当a b的扩散区域有公共部分 连通块的定义是块内的任意两个点u v都必定存在路径e u a0
  • 洛谷-U132410-最小代价(最小生成树(森林)+ 虚拟点)

    题目描述 xff1a 点击进入 思路 最小生成树的变形 我们虚拟一个 零 结点 xff0c 这个结点跟每个村庄 i 连边 xff0c 权值分别为在村庄 i 建立一个网络中心的花费 然后其他边都正常连 xff0c 最后求最小生成树即可 代码
  • 洛谷 P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff
  • 数据结构:最小生成树--Prim算法

    最小生成树 Prim算法 最小生成树 给定一无向带权图 顶点数是n 要使图连通只需n 1条边 若这n 1条边的权值和最小 则称有这n个顶点和n 1条边构成了图的最小生成树 minimum cost spanning tree Prim算法
  • 最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    作者 STzen 链接 https www jianshu com p 683ffde4f3a3 来源 简书 最小生成树 列子引入 如图假设v0到v8表示9个村庄 现在需要在这9个村庄假设通信网络 村庄之间的数字代表村庄之间的直线距离 求用
  • 【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

    Prim算法和Dijkstra算法很相似 而且也按照是不是稀疏图分成了两种 对于稠密图 用朴素版的Prim算法 时间复杂度 O n 2 O n 2
  • POJ1785

    prim算法求最小生成树 1 输入 一个加权连通图 其中顶点集合为V 边集合为E 2 初始化 V new x 其中x为集合V中的任一节点 起始点 E new 为空 3 重复下列操作 直到V new V a 在集合E中选取权值最小的边
  • 最小生成树笔记(Prim算法&&Kruskal算法)

    1 最小生成树 最小生成树 Minimum Spanning Tree 简称MST 是指 在一个连通无向图中 找到一个包含所有顶点的树 且该树的所有边的权重之和最小 换句话说 最小生成树是原图中的一个子图 它包含所有顶点 并且连接所有顶点的
  • tree【WQS二分+MST】

    题目链接 洛谷 精确涉及到了WQS二分 BZOJ 2654 不推荐 个人不推荐做BZOJ2654的这道题 因为那道题可以水过去 不用WQS二分也是可以的 可以直接二分答案 显然是没有这个好的 先在这里讲一下什么是WQS二分吧 也是从网上看来
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • prim算法解决最小生成树问题

    刚好这次又遇到了prim算法 就做了下整理 可以参考 数据结构与算法分析c 描述 这本书 个人而言 很经典 并把以前写的代码也整理了一下 做下分享 同时也加深下自己的理解 prim算法是解决最小生成树问题的一个很好的算法 此算法是是将点集合

随机推荐

  • 摩斯密码解码脚本

    摩斯密码解码脚本 解题思路 0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0
  • php匹配关键字并跳转页面

    php匹配关键字跳转页面 strstr函数搜索要从目标字符串中搜索的字符串 xff1b strstr函数仅用于检查字符串是否存在 xff1b strstr函数的用法如下 lt php b 61 39 or 39 name 61 GET 39
  • docker常见命令小结

    docker常见命令小结 常见命令 docker ps 查看正在运行的容器 docker exec it 264bb068855e bin bash 进入容器 xff0c 并作出修改 docker commit 3bd0eef03413 l
  • 前端html文件下载,同源与异源下载

    属性说明download下载的资源的名称target打开该连接的方式 self blank href资源的地址 本地 远程地址 a标签跳转 lt DOCTYPE html gt lt html gt lt head gt lt meta c
  • Python图像(字母数字)识别

    本文只针对数字或字母验证码识别 准备工具 tesseract ocr w64 setup v4 1 0 20190314 exepip install pytesseractpip install pillow中文包 tesseract o
  • Python习题

    1 题目 xff1a 编写一个程序 xff0c 使用for循环输出0 10之间的整数 xff1b 代码 xff1a span class token keyword for span i span class token keyword i
  • 面向对象模块和包

    文章目录 1 1 模块1 2 模块的使用2 包 1 1 模块 参考链接 xff1a Python 面向对象 模块和包 来源 xff1a CSDN Python面向对象 模块和包 来源 xff1a CSDN 概念 xff1a 每一个以py为拓
  • SUNDIALS库的编译和使用

    SUNDIALS库的编译和使用 1 简介 SUNDIALS SUite of Nonlinear and DIfferential ALgebraic equation Solvers 是由美国劳伦斯利福摩尔国立实验室 xff08 Lawr
  • 【ing】在Linux虚拟机上安装Sundials库(图文)

    1 Sundials库下载 Sundials下载地址 2 具体步骤 2 1 下载sundials 2 2 0 本次尝试选择sundials 2 2 0进行安装 Sundials文件内容如下 xff1a 2 2 创建安装目录 安装目录名称为
  • 基于docker部署Prometheus

    文章目录 基于Docker搭建Prometheusgitee 介绍Prometheus一 安装运行Prometheus docker版 部署Prometheus1 安装docker联网状态下阿里云离线安装包下载2 下载镜像包3 启动node
  • 程序设计思维与实践 Week11 作业 E 选做题11-1 东东与 ATM

    题目描述 xff1a 一家银行计划安装一台用于提取现金的机器 机器能够按要求的现金量发送适当的账单 机器使用正好N种不同的面额钞票 xff0c 例如D k xff0c k 61 1 2 N xff0c 并且对于每种面额D k xff0c 机
  • kubectl edit

    文章目录 kubectl edit官方文档语法示例 kubectl edit 官方文档 使用默认编辑器 编辑服务器上定义的资源 使用命令行工具获取的任何资源都可以使用edit命令编辑 edit命令会打开使用KUBE EDITOR xff0c
  • kubectl exec

    文章目录 kubectl exec通过bash获得pod中某个容器的TTY xff0c 相当于登录容器 命令行 创建一个test文件 xff1a kubectl exec exec命令同样类似于docker的exec命令 xff0c 为在一
  • kubectl describe

    文章目录 describe语法选项 示例描述一个node详细信息描述一个pod描述calico yaml中的资源类型和名称指定的pod描述所有的pod描述所有包含label k8s app 61 calico kube controller
  • k8s自动化安装脚本(kubeadm-1.21.1)

    文章目录 介绍软件架构安装教程更新内容2023 02 102022 10 202022 08 06准备部署包 操作步骤环境准备结构备注 解压部署包修改host文件初始化环境验证ansible配置 安装k8s集群登录master的节点添加no
  • Shell——docker启动yapi

    文章目录 脚本简介脚本注解执行方式脚本内容 脚本简介 基于运维统一脚本中 17 平台管理下的Yapi管理平台部署系统版本Centos7docker环境 脚本注解 该脚本快速部署yapi平台 xff0c 已通过docker commit把对应
  • Shell——查看基础信息脚本

    文章目录 脚本简介脚本注解安装方式执行方式执行结果 脚本内容新版本旧版本 脚本简介 基于运维统一脚本中 xff0c 19 脚本安装下的检查服务器脚本安装使用yum安装 yum仓库 xff0c 系统版本Centos7 脚本注解 该脚本为了快速
  • k8s自动化安装脚本(kubeadm-1.23.7)

    文章目录 介绍软件架构版本介绍更新内容2023 02 192023 02 152023 02 142023 02 102022 10 202022 08 06准备部署包 操作步骤环境准备结构备注 解压部署包修改host文件脚本使用方式初始化
  • 在VS code中打开网页预览

    在VS code中打开网页预览 在平时进行前端设计的时候 xff0c 你是否会因为无法实时观察到网页的变化而苦恼 xff0c 每一次都要重新打开html文件的过程过于繁琐 xff0c 现在就有一种新的方式能够让你在coding的时候实时观察
  • 最小生成树+思维 扩散(洛谷 P1661)

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