P1661 扩散

P1661 扩散

题目描述

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

两个点a、b连通,记作e(a,b),当且仅当a、b的扩散区域有公共部分。连通块的定义是块内的任意两个点u、v都必定存在路径e(u,a0),e(a0,a1),…,e(ak,v)。给定平面上的n给点,问最早什么时刻它们形成一个连通块。

输入输出格式

输入格式:

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

【数据规模】

对于20%的数据,满足1≤N≤5; 1≤X[i],Y[i]≤50;

对于100%的数据,满足1≤N≤50; 1≤X[i],Y[i]≤10^9。

输出格式:

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

输入输出样例

输入样例#1:

2
0 0
5 5

输出样例#1:

5

分析:

离散化,最短距离就是映射在x轴和y轴上的距离和除2。

比如说一个点是(5,0),一个点是(0,4),最短距离就是(|5-0|+|0-4|+1)/2=5

加1保证向上取整。

本题就是求最小生成树的最大边。

距离不是严格的曼哈顿距离,应该是

dis[i,j]=(max(x[i]-x[j],x[j]-x[i])+max(y[i]-y[j],y[j]-y[i])-1)/2+1;

可以最小生成树,但是题目可以看出是最小生成树的最大边,所以二分答案应该也可以做,但是二分答案不好调,所以放最小生成树代码。。。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<vector>
 4 #include<algorithm>
 5 #define mysister
 6 using namespace std;
 7 const int maxn=50;
 8 struct bian
 9 {
10     int u,v,w;
11     bian(int a,int b,int c):u(a),v(b),w(c){}
12     bool operator < (bian b)
13     {
14         return w<b.w;
15     }
16 };
17 int n,x[maxn],y[maxn],ans=0,fa[maxn];
18 vector<bian>g;
19 int find(int u)
20 {
21     return fa[u]==u?u:fa[u]=find(fa[u]);
22 }
23 int main()
24 {
25     scanf("%d",&n);
26     for(int i=0;i<n;i++)
27     {
28       scanf("%d%d",&x[i],&y[i]);
29       fa[i]=i;
30       for(int j=0;j<i;j++)
31         g.push_back(bian(i,j,(max(x[i]-x[j],x[j]-x[i])+max(y[i]-y[j],y[j]-y[i])-1)/2+1));
32     }
33     sort(g.begin(),g.end());
34     for(int i=0;i<g.size();i++)
35       if(find(g[i].u)!=find(g[i].v))
36       {
37           fa[find(g[i].u)]=find(g[i].v);
38           ans=max(ans,g[i].w);
39       }
40     printf("%d",ans);
41 }
时间: 2024-08-06 22:42:43

P1661 扩散的相关文章

洛谷P1661 扩散

题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离,如图. 两个点a.b连通,记作e(a,b),当且仅当a.b的扩散区域有公共部分.连通块的定义是块内的任意两个点u.v都必定存在路径e(u,a0),e(a0,a1),…,e(ak,v).给定平面上的n给点,问最早什么时刻它们形成一个连通块. 输入输出格式 输入格式: 第一行一个数n,以下n行,每行一个点坐标. [数据规模] 对于20%的数据,满足1≤N≤5; 1≤X[i],Y[i]≤50; 对于100%的数据,满足1≤N≤50; 1≤X[

扩散(diffusion)和弥散(dispersion)有什么区别

作者:谢易正链接:https://www.zhihu.com/question/23914350/answer/177359196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 通常在微观层面,物质的传递可以由三种机制构成: 扩散(Diffusion)+移流(advection)+弥散(dispersion).dispersion(弥散)是在有advection(移流)存在的情况下发生的,是由于流体流动时溶质的流动速度不均匀而引起的一种对扩散现象(diffusio

Atitit.病毒木马程序的感染&#160;传播扩散&#160;原理

Atitit.病毒木马程序的感染 传播扩散 原理 1. 从木马的发展史考虑,木马可以分为四代 1 2. 木马有两大类,远程控制  vs  自我复制传播1 3. 自我复制2 3.1. 需要知道当前cpu核心数量2 3.2. Cpu占用百分比2 3.3. Io占用百分比2 3.4. 内存占用百分率2 4. 通过email传播扩散3 5. 通过qq等sns im软件传播扩散3 6. Bbs 论坛网站传播扩散3 7. 捆绑下载软件扩散3 8. 局域网扩散感染3 9. 利用系统或软件漏洞: 3 10. 隐

PDF数据防扩散系统介绍

在企业信息化过程中,大量的企业重要图纸和资料都是以电子文件的方式存在.为了避免内部重要数据的外泄,采取了多种方式:设计部门的门禁管制.防火墙.禁止计算机的USB接口等等.但是泄密问题还是时有发生,原因是电子文档的外泄途径太多,解决了外部人员非法访问的问题,但不能根本解决电子文档内部人员造成的二次传播问题,靠"堵"的方法是难以保护数据安全的. 针对客户的需求我们开发了一套PDF数据防扩散系统软件,它是一个对PDF文件设定阅读次数.阅读期限.打印次数的软件系统.在系统部署上,分服务器端文档

P2002 消息扩散

P2002 消息扩散 题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入输出格式 输入格式: 第一行两个整数n,m表示n个城市,m条单向道路. 以下m行,每行两个整数b,e表示有一条从b到e的道路,道路可以重复或存在自环. 输出格式: 一行一个整数,表示至少要在几个城市中发布消息. 输入输出样例 输入样例#1: 5 4 1

Houdini 属性非均匀扩散简易模型

很久以前看巫妖王之怒开场动画的时候就一直在想那把剑上的魔法是怎样做的,最近做了一个类似的实验完成了一个简易的属性传递模型,这个方法能够适用于热量传递,腐蚀或者蔓延的效果.           模型的原理是使用点云中的pcfilter()函数来将目标属性是进行类似模糊的扩散,同时使用sop中的solver来将模糊值进行累加,并定义如果该值累加超过一定阈值之后便不会再继续增加,这样就产生了扩散的这个效果.本人在之前Gray Scott Reaction-Diffusion 文章中也提到了扩散的一个方

[家里蹲大学数学杂志]第055期图像滤波中的方向扩散模型

$\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 5.4.1 节的详细论述. $\bf 关键词$: 图像滤波; 方向扩散模型; matlab 编程 1. 模型的建立 从保护图像边缘的观点出发, 我们希望扩散是沿着平行于边缘的切线方向 (即垂直于 $\n I$ 的方向) 进行. 于是得到如下 PDE: $$\bee\label{1:df} I_t=I_{\xi\xi}, \eee$$ 其中 $\xi(\perp \n I)$ 为单位矢量. 我们化简 \eqref{1:d

洛谷P2002 消息扩散

题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入输出格式 输入格式: 第一行两个整数n,m表示n个城市,m条单向道路. 以下m行,每行两个整数b,e表示有一条从b到e的道路,道路可以重复或存在自环. 输出格式: 一行一个整数,表示至少要在几个城市中发布消息. 输入输出样例 输入样例#1: 5 4 1 2 2 1 2 3 5

思绪的扩散

有时候写着写着就给自己闪光起来,喜欢幻想,某种释怀,后来脑袋都跟到幻想里去了,忘记了本来在做的事.等到回过头来的时候,发现 有些没有抓紧而让那些思维消散了一些. 写东西太理性了不好,通俗易懂比较好一点.有时候稍微深入一下然后就出来.或者可以用简单的话语描述出来比较深沉的清净. 如果写着写着钻错了方向就坏掉了,还是不能太被自己的经历打扰,回到感兴趣的主线上.不过有时经历也会成为兴趣所在,融合到主线里. 写东西没再有原则,只希望走错路了之后能想办法掰回来,或者,走在陌生的路上不要惊慌也显得比较礼貌.