扩散(洛谷-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,因此利用 Kruskal 求出最小生成树,找到其中最长边即可
源代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define Pair pair<int,int>
const double EPS = 1E-10;
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {-1,1,0,0,-1,-1,1,1};
const int dy[] = {0,0,-1,1,-1,1,-1,1};
using namespace std;
struct Edge{int x,y;int dis;Edge(){}Edge(int x,int y,int dis):x(x),y(y),dis(dis){}bool operator < (const Edge &rhs)const{return dis<rhs.dis;}
}edge[N];
struct Node{int x,y;Node(){}Node(int x,int y):x(x),y(y){}
}node[N];
int tot;
int father[N];
int getDis(int i,int j){return abs(node[i].x-node[j].x)+abs(node[i].y-node[j].y);
}
int Find(int x){return father[x]==x?x:father[x]=Find(father[x]);
}
int Kruskal(int n){for(int i=1;i<=n;i++)father[i]=i;int num=0;int res=-INF;for(int i=1;i<=tot;i++){int x=edge[i].x;int y=edge[i].y;x=Find(x);y=Find(y);if(x!=y){res=max(res,edge[i].dis);num++;father[x]=y;}if(num==n)break;}return res;
}
int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&node[i].x,&node[i].y);for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){edge[++tot].x=i;edge[tot].y=j;edge[tot].dis=getDis(i,j);}}sort(edge+1,edge+1+tot);int res=Kruskal(n);printf("%d\n",(res+1)/2);return 0;
}
扩散(洛谷-P1661)相关推荐
- 2019.6.7 一场搜索专题的考试【including 洛谷·血色先锋队,入门OJ·兴建高铁,珠光宝气阁
这次分数还好.但全是搜索题还没上200就有点打击人了--[本狸才177QAQ 血色先锋队/血色敢死队 传送门:洛谷P1332 & 入门OJ P2259 Description 邪魔天国领主复活 ...
- 关于图的广度优先搜索—————洛谷1332
这边讲一下一般的解题思路,一般来说,我们做题都是将复杂化为简单.所以一般切题,我们都是看是否能够构造一个邻接矩阵. 对于邻接矩阵,但凡有一点算法基础都能知道它其中的一个作用就是用来描述数据之间的相互关 ...
- 洛谷P1135:奇怪的电梯(lift)
题目 奇怪的电梯 - 洛谷 思路讲解 这道题主要用的是BFS(广度优先搜索),对电梯路径进行广搜,最后得出答案 广搜,全称广度优先搜索,相较dfs来讲,它更像是一个涟漪. 啥意思嘞?画一个图你就懂了 ...
- 洛谷 P1332 血色先锋队
洛谷 P1332 血色先锋队 第一次写bfs,纪念一下 qwq 之前一直都在写dfs,对bfs有莫名的恐惧 现在觉得...好像差不多 qwq 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一 ...
- 洛谷or牛客数据结构+算法
栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...
- 洛谷P1332 血色先锋队
此题源于洛谷P1332 链接奉上qwq:P1332 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋 ...
- 洛谷 P1913 L国的战斗之伞兵
L国的战斗之伞兵 题目背景 L国即将与I国发动战争!! 题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区--(可怜的小 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
最新文章
- 建房子 最安全图纸_农村建什么样的房子合适?分享15套图纸,总有一套适合你...
- 【BZOJ3555】[Ctsc2014]企鹅QQ hash
- network location awareness启动不了_【新手看过来】无钥匙启动功能
- 推进大数据中心新能源应用 广东省六部门联合印发培育新能源战略性新兴产业集群行动计划(2021—2025年)...
- linux 查看入侵日志,linux入侵日志记录清除
- ABAP Authorization trace工具
- request.form以及postman发送表单数据
- 第二天matplotlib绘图
- spark streaming之 windowDuration、slideDuration、batchDuration​
- Map转JSON内容解释
- Eclipse Debug功能的使用教程
- 测试用例的几种常见设计方法
- 【微服务】什么是SOA服务架构?
- 手把手教你制作gif动图,一分钟轻松学会
- 二叉搜索树(城市数据库)
- VCL界面控件DevExpress VCL全新发布v21.1.6
- 鸟哥的Linux私房菜:首次登陆与在线求助,LINUX最简单的命令及应用(一)
- 我总结的30条架构原则~
- 查看SEM竞价外地排名的方法
- C1认证之web基础知识及习题——我的学习笔记