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是日语‘风’的谐音,最近宣布退休的宫崎骏所拍摄的影片“起风了” ...
随机推荐
- 96. Unique Binary Search Trees1和2
/* 这道题的关键是:动态表尽量的选取,知道二叉搜索树中左子树的点都比根节点小,右子树的点都比根节点大 所以当i为根节点,左子树有i-1个点,右子树有n-i个点,左右子树就可以开始递归构建,过程和一开 ...
- 【Go】我与sync.Once的爱恨纠缠
原文链接: https://blog.thinkeridea.com/202101/go/exsync/once.html 官方描述 Once is an object that will perfo ...
- maven仲裁机制
maven仲裁机制 玩过springboot的人都知道 springboot项目中你一般看不到大段的spring相关包 而是像 spring-boot-start一个jar包就包含spring相关的 ...
- mysql基础之double,float长度标度定义
MySQL类型float double decimal的区别 float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decima ...
- JavaScript 获得当前日期+时间
//直接从项目中copy出来的,亲测可用.function getTodayTime(){ var date = new Date(); var seperator1 = "-"; ...
- 区间合并 C++
#include <iostream> #include <vector> #include <algorithm> using namespace std; ty ...
- 在 WPF 中使用 MahApps.Metro.IconPacks 提供的大量图标
MahApps.Metro.IconPacks https://github.com/MahApps/MahApps.Metro.IconPacks 提供了大量的高质量的图标供WPF使用,极其方便. ...
- appium元素识别方式实战
github代码:: https://github.com/w550856163/App_Demo.git tag: V1.1 Appium Inspector定位工具界面介绍: Selecte ...
- Head First 设计模式 —— 15. 与设计模式相处
模式 是在某情境(context)下,针对某问题的某种解决方案. P579 情景:应用某个模式的情况 问题:你想在某情境下达到的目标,但也可以是某情境下的约束 解决方案:一个通用的设计,用来解决约束. ...
- 用 CSS background 实现刻度线的呈现
有的时候,我们需要在网页中的进度条或某种度量计上呈现一条条的刻度线.例如这种: 简单的实现方式,大致有两种:一是用图片做背景,横向平铺线条图片:二是给每一块刻度区域平铺一个元素,然后用边线实现.身为一 ...