#Kruskal,分治#AT4569 Connecting Cities
考虑如何去掉这个绝对值,
换句话说,如何减少边数并且能建出 MST。
在求解偏序问题时,往往会分而治之,
这样原来 \(O(n^2)\) 的做法就能够被优化。
考虑将所有点对半折开,
左半部分和右半部分的建边分治处理,
只考虑横跨两部分的建边,
若左半部分的点为 \(j\),右半部分的点为 \(i\)
边权就可以转换成:
\]
既然 \(i\) 和 \(j\) 独立出来,那么只需要选出
右半部分 \(\min\{A_i+i\times d\}\) 所对应的 \(i\),
左半部分 \(\min\{A_j-j\times d\}\) 所对应的 \(j\),
将 \(j\) 与右半部分所有点连边,\(i\) 同理。
那么这样就只有 \(O(n\log n)\) 条边,
用 Kruskal 跑最小生成树就可以做到 \(O(n\log^2n)\)。
Code
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=200011; typedef long long lll;
struct node{int x,y; lll w;}e[N<<5];
lll a[N],b[N],D,ans; int n,f[N],m;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
bool cmp(node x,node y){return x.w<y.w;}
inline signed getf(int u){return f[u]==u?u:f[u]=getf(f[u]);}
inline void dfs(int l,int r){
if (l==r) return;
rr int mid=(l+r)>>1,t0=l,t1=r;
for (rr int i=l;i<=mid;++i)
if (a[t0]>a[i]) t0=i;
for (rr int i=r;i>mid;--i)
if (b[t1]>b[i]) t1=i;
for (rr int i=l;i<=mid;++i)
e[++m]=(node){i,t1,a[i]+b[t1]};
for (rr int i=r;i>mid;--i)
e[++m]=(node){t0,i,a[t0]+b[i]};
dfs(l,mid),dfs(mid+1,r);
}
signed main(){
n=iut(),D=iut();
for (rr int i=1;i<=n;++i){
rr int x=iut(); f[i]=i;
a[i]=x-i*D,b[i]=x+i*D;
}
dfs(1,n),sort(e+1,e+1+m,cmp);
for (rr int i=1;i<=m;++i){
rr int fa=getf(e[i].x),fb=getf(e[i].y);
if (fa!=fb) f[fa]=fb,ans+=e[i].w;
}
return !printf("%lld",ans);
}
#Kruskal,分治#AT4569 Connecting Cities的更多相关文章
- 【LeetCode】1135. Connecting Cities With Minimum Cost 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Kruskal算法 日期 题目地址:https://l ...
- AtCoder keyence2019 E Connecting Cities
keyence2019_e $N$ 个节点的无向图 $G$,节点 $i,j$ 之间的边权值为 $|i - j| \times D + A_i + A_j$ . 求最小生成树(Minimum Spann ...
- LeetCode 1135. Connecting Cities With Minimum Cost
原题链接在这里:https://leetcode.com/problems/connecting-cities-with-minimum-cost/ 题目: There are N cities nu ...
- KEYENCE Programming Contest 2019 Solution
A - Beginning 签到. #include <bits/stdc++.h> using namespace std; int main() { ]; while (scanf(& ...
- HDU 4126 Genghis Khan the Conqueror 最小生成树+树形dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4126 Genghis Khan the Conqueror Time Limit: 10000/50 ...
- hdu4126_hdu4756_求最小生成树的最佳替换边_Kruskal and Prim
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem: Portal: hdu4126 hdu4756 原题目 ...
- hdu4126Genghis Khan the Conqueror (最小生成树+树形dp)
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others) Total Submiss ...
- 【LeetCode】代码模板,刷题必会
目录 二分查找 排序的写法 BFS的写法 DFS的写法 回溯法 树 递归 迭代 前序遍历 中序遍历 后序遍历 构建完全二叉树 并查集 前缀树 图遍历 Dijkstra算法 Floyd-Warshall ...
- csuoj 1116: Kingdoms
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 1116: Kingdoms Time Limit: 3 Sec Memory Limit ...
- CodeForces Round 192 Div2
This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...
随机推荐
- SBI信息反馈法
https://baijiahao.baidu.com/s?id=1605128367255769158&wfr=spider&for=pc
- 硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析
前言 前面输出了HDMI,LVDS,MIPI-DSI,这里还有一个常用的显示接口就是VGA了,这个用的不多了,一般板子都是hdmi了. 本篇分析底板VGA电路. VGA接口 VGA(Vi ...
- 一文详解云上自动化部署集群管理工具 Nebula Operator
本文首发于 Nebula Graph 公众号:Nebula Operator 开源啦!一文详解这个云上自动化部署集群管理工具 在介绍 Nebula Operator 之前,让我们先来了解下什么是 Op ...
- .Net之多语言配置
介绍 支持多语言使网站可以覆盖更广泛的受众. ASP.NET Core 提供的服务和中间件可将网站本地化为不同的语言. 本次示例环境:vs2019.net5 配置 无需引用Nuget包即可实现以下功能 ...
- Linux操作系统不同文件类型区别?
蓝色代表目录,绿色代表可执行文件,红色代表压缩文件.浅蓝色表示连接文件.白色表示其他文件 相关目录及作用: Bin : 存放普通用户可执行的指令 Boot: 开机引导目录 Dev:设备目录 Etc: ...
- 标准差为什么除以n-1
参考:https://blog.csdn.net/qian2213762498/article/details/80558018 如果要测量中国人的平均身高,假设为μ,通常会随机取假设10000人,求 ...
- Fiddler修改响应体
方法1 将请求从左侧列表中,拖入AutoResponder中. 然后右键规则,点击编辑 修改后点击save 方法2 在AutoResponder中选择Create New Response也可类似方式 ...
- 数据湖-Hudi/IceBerg
- C#之winform捕获Console.WriteLine内容到日志文件
问题描述 之前接手同事的项目,是一个类似于服务端后台的Winform程序,主界面隐藏起来,只再任务栏显示程序图标. 整个项目里面没有日志记录功能,全靠Console.WriteLine打印信息.自己调 ...
- springboot增加slf4j
参考:https://blog.csdn.net/qq_27706119/article/details/104977666(主要) https://www.liaoxuefeng.com/wiki/ ...