LOJ10015扩散
10015. 「一本通 1.2 练习 2」扩散
一个点每过一个单位时间就会向 4 个方向扩散一个距离,如图所示:两个点 a 、b 连通,记作e(a,b) ,当且仅当 a、b 的扩散区域有公共部分。连通块的定义是块内的任意两个点 u、v都必定存在路径e(u,a0),e(a0,a1),e(a1,a2)...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<=1e9 。
_______________________________________
二分出最短时间d,那么d时间内每个点扩展d距离,则两点的距离缩短2*d距离,距离小于2*d的点就连同了。
枚举每两个点的距离判断是否小于2d,并用并查集维护。
判断并查集是否合并了n-1次就可以了!
_______________________________________

1 #include<bits/stdc++.h>
2 using namespace std;
3 struct node
4 {
5 int x,y;
6 }ns[55];
7 int f[55];
8 int n;
9 int find(int x)
10 {
11 return f[x]==x?x:f[x]=find(f[x]);
12 }
13 void join(int x,int y)
14 {
15 int xx=find(x),yy=find(y);
16 f[xx]=yy;
17 }
18 int dis(int aa,int bb)
19 {
20 node a=ns[aa],b=ns[bb];
21 int xx,yy;
22 xx=a.x>b.x?a.x-b.x:b.x-a.x;
23 yy=a.y>b.y?a.y-b.y:b.y-a.y;
24 return xx+yy;
25 }
26 bool pd(int d)
27 {
28 d<<=1;
29 int cnt=0;
30 for(int i=1;i<=n;++i)f[i]=i;
31 for(int i=1;i<=n;++i)
32 for(int j=i+1;j<=n;++j)
33 if(dis(i,j)<=d && find(i)!=find(j))
34 {
35 join(i,j);
36 cnt++;
37 }
38 return cnt==n-1;
39 }
40 int main()
41 {
42 scanf("%d",&n);
43 for(int i=1;i<=n;++i)scanf("%d%d",&ns[i].x,&ns[i].y);
44 int l=1,r=1000000000,ans;
45 while(l<=r)
46 {
47 int mid=(l+r)>>1;
48 if(pd(mid))ans=mid,r=mid-1;
49 else l=mid+1;
50 }
51 cout<<ans;
52 return 0;
53 }
LOJ10015扩散的更多相关文章
- 纯css3圆形从中心向四周扩散动画效果
查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...
- 【转】Matlab练习程序(各向异性扩散)
http://www.cnblogs.com/tiandsp/archive/2013/04/18/3029468.html 主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留 ...
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...
- Atitit.病毒木马程序的感染 传播扩散 原理
Atitit.病毒木马程序的感染 传播扩散 原理 1. 从木马的发展史考虑,木马可以分为四代 1 2. 木马有两大类,远程控制 vs 自我复制传播1 3. 自我复制2 3.1. 需要知道当前cpu ...
- 洛谷P1661 扩散
题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离,如图. 两个点a.b连通,记作e(a,b),当且仅当a.b的扩散区域有公共部分.连通块的定义是块内的任意两个点u.v都必定存在路径e(u,a ...
- [unity3d程序] 纹理扩散
纹理扩散适合与做游戏的背景(卷轴效果),原理就是让材质贴图动起来(循环运动),代码很简单希望对大家有用 1 2 3 4 5 6 7 8 9 10 11 12 13 // Scroll main tex ...
- Discuz X1.5 利用添加好友处存储xss进行蠕虫worm扩散
Discuz X1.5 在添加好友的地方有处存储xss,借助此处xss跟用户交互可以进行蠕虫指数扩散. 位置在添加好友处 x完之后的效果 点击后触发 ok 借助此存储xss,我们进行worm传播,dz ...
- 用HTML5 Canvas 做擦除及扩散效果
2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...
- 一点一滴完全突破KAZE特征检测算法,从各向异性扩散滤波开始(1)
ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE.尽管,这个算法是几个法国人提出的,但是算法却有一个日文的名字.KAZE是日语‘风’的谐音,最近宣布退休的宫崎骏所拍摄的影片“起风了” ...
随机推荐
- 各开源协议BSD、Apache Licence 2.0、GPL
以下是上述协议的简单介绍:BSD开源协议BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以"为所欲为",可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有 ...
- Centos7上以RPM包方式安装Oracle 18c XE
Centos7上以RPM包方式安装Oracle 18c XE 安装阿里云 YUM 源 https://opsx.alibaba.com/mirror?lang=zh-CN 一.安装oracle数据库 ...
- C语言-表达式和运算符
表达式:表达式是c语言的主体,在c语言中,表达式由操作符和操作数组成.简单的表达式可以只有一个操作数.根据操作符的个数,可以将表达式分为简单表达式和复杂表达式,简单的表达式只含有一个操作符(如:5+5 ...
- Wi-Fi 6 与 5G 相比哪个更快?
随着 iPhone12 的发布,iOS 系统正式开始拥抱 5G,智能手机全面进入了 5G 时代.伴随着各大运营商的 5G 推广以及相关基站建设的如火如荼,5G 成了大家广泛讨论的热门词汇.这样热门的光 ...
- Linux下Oracle 11G XE 安装笔记
操作系统 [oracle@RAC02 ~]$ lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:cor ...
- Flutter 应用入门:包管理
pubspec.yaml name: flutter_combat description: A Flutter combat application. # The following defines ...
- leetcode-222完全二叉树的节点个数
题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...
- 实现strStr
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- Azure Terraform(四)状态文件存储
一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...
- 用js实现打印九九乘法表
用js在打印九九乘法表 思考 在学习了流程控制和条件判断后,我们可以利用js打印各式各样的九九乘法表 不管是打印什么样三角形九九乘法表,我们都应该找到有规律的地方,比如第一列的数字是什么规律,第一行的 ...