#10015. 「一本通 1.2 练习 2」扩散 二分+并查集或Floyd
#10015. 「一本通 1.2 练习 2」扩散 二分+并查集或Floyd
题目链接
思路:
有两种方法:二分+并查集;Floyd。
————————————————————————————————————————————————————
方法一:二分+并查集
思路:
就是一个二分,需要判断的是每一次枚举的时间下的图是刚连通,还是早就连通了,还是没有连通。
用二分法枚举最小时间,判断当前的图是否连通,并查集只有一个父节点说明时间找大了,否则就是时间找小了,接下来移动二分法中的左右断点,二分的最后就是答案。
代码:
//二分+并查集
//就是一个二分,每枚举一个时间就判断一下现在是连成一个块了:
//是刚连成,还是早就连成了;还是没有连成。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=100002;
int n,x[55],y[55],f[55];
int getf(int v)
{if(f[v]==v)return v;else{f[v]=getf(f[v]);return f[v];}
}
int main()
{int i,j,z,t=0;cin>>n;for(i=1;i<=n;i++){scanf("%d%d",&x[i],&y[i]);}int l=0,r=1e9,sum=0;while(l<=r)//二分枚举最小时间{int mid=(l+r)/2;for(i=1;i<=n;i++){f[i]=i;}for(i=1;i<=n;i++){for(j=i+1;j<=n;j++){int s=abs(x[i]-x[j])+abs(y[i]-y[j]);if(s<=mid*2){int t1=getf(i),t2=getf(j);if(t1!=t2)f[t1]=t2;}}}sum=0;for(i=1;i<=n;i++){if(f[i]==i)sum++;}if(sum==1){t=mid;r=mid-1;}elsel=mid+1;}cout<<t<<endl;
}
————————————————————————————————————————————————————
方法二:Floyd
思路:图的初始值赋值为两点之间的距离:d=|x1-x2|+|y1-y2|;然后遍历一遍Floyd算法,更新两点之间的最小距离,然后找出最大的距离;最大距离的两点如果连通的话,那其他的点也都连通了,设最大距离为maxx,则最小时间为t=(maxx+1)/2;
代码:
//Floyd
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=100002;
int n,x[55],y[55],e[55][55];
int main()
{int i,j,z,t;cin>>n;for(i=1;i<=n;i++){scanf("%d%d",&x[i],&y[i]);}for(i=1;i<=n;i++){for(j=1;j<=n;j++){e[i][j]=e[j][i]=abs(x[i]-x[j])+abs(y[i]-y[j]);}}for(z=1;z<=n;z++){for(i=1;i<=n;i++){for(j=1;j<=n;j++){e[i][j]=min(e[i][j],max(e[i][z],e[z][j]));}}}t=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){t=max(t,e[i][j]);}}printf("%d\n",(t+1)/2);return 0;
}
感觉不错的请一键三连哦!
#10015. 「一本通 1.2 练习 2」扩散 二分+并查集或Floyd相关推荐
- 「一本通 6.5 练习 3」迷路
「一本通 6.5 练习 3」迷路 题目描述 大意说一个给你有向图, 一个有n个节点,每个节点相连的边为所需要花费的时间, 问你从1到n 在时间刚好为t是的方案数.输出%2009 注意:不能在某个节点逗 ...
- 【C++】「一本通 1.1 例 4」加工生产调度
「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...
- LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】
10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...
- #10016. 「一本通 1.2 练习 3」灯泡(三分)
参考博客链接:「一本通 1.2 练习 3」灯泡(三分) #include<stdio.h> #include<string.h> #include<math.h> ...
- 【C++】「一本通 1.1 例 2」种树
「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...
- #10001. 「一本通 1.1 例 2」种树
#10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...
- 【C++】「一本通 1.1 例 5」智力大冲浪
「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...
- 「一本通 1.2 例 2」Best Cow Fences
题目链接: 链接: [link](信息学奥赛一本通(C++版)在线评测系统). 首先这道题要求找平均数,且要求所选片段长度需要大于等于l.那么首先想到的就是最暴力的方法就是找到所有大于等于l的片段在其 ...
- LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci
题目链接 题目大意 $$F[i]=F[i-1]+F[i-2]\ (\ F[1]=1\ ,\ F[2]=1\ )$$ $$T[i]=F[1]+2F[2]+3F[3]+...+nF[n]$$ 求$T[n] ...
- loj.ac:#10024. 「一本通 1.3 练习 3」质数方阵
CSDN的博客 友键 题目描述 质数方阵是一个\(5×5\)的方阵,每行.每列.两条对角线上的数字可以看作是五位的素数.方格中的行按照从左到右的顺序组成一个素数,而列按照从上到下的顺序.两条对角线也是 ...
最新文章
- 5、catch中发生了未知异常,finally代码块如何应对?
- 12月31日写成13月1日引发重大 Bug,程序员新年就要被“祭天”?
- bzoj4033:[HAOI2015]树上染色
- 本地突破XP系统权限
- /bin/sh -c的必要性
- 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
- Vagrant+VirtualBox版本的坑
- 借钱,一定要有还钱的素质
- 《WF编程》系列之30 - 基本活动:错误处理
- MPEG音视频编解码之MP3编解码概述
- 诺基亚N950–MeeGo式体验
- Redis6.2.6下载和安装
- 3dsmax模型导出网页3D版gltf格式文件 #2021.6.25
- 强大的分组SectionListView, 支持自定义组头布局和分组的内容布局, 组头有挤压效果
- python实现word文档合并 v2.0
- MyBatis-Plus 新增插入成功并获取自增Id(没问题 已实验哟)
- 关于机器学习的知识点,全在这篇文章里了
- 97年世界编程大赛一等奖作品
- Cisco AP-胖瘦AP的转换
- Chrome主页被http://hl2.gndh111.top/劫持,自动跳转hao123的解决办法