【20zr提高组十连测day10】信

news/2024/9/27 13:49:59

【20zr提高组十连测day10】信

给定 \(n,m\)\(n,m\le 10^5\),给定分别长度为 \(n-1,m,n,m-1\) 的单调不减的序列 \(A,B,C,D\),然后形如该图建边:

pic1

考虑到序列是递增的,对于除最左上角以外的每个点,每个点一定要选和自己相连的一条边才能形成一棵树。那么选择左边或上边一定是更优的,而且我们发现随便选择左边或上边,最终刚好都能形成一棵树。

这棵生成树就是最优的生成树,它的权值是 \(\sum \min(a_i+b_j,c_{i-1}+d_{j+1})\)

这样比较丑陋,我们把 \(A,D\) 的标号右移以为,然后钦定 \(a_1=inf,d_1=inf\) 这样不影响正确性。

pic2

答案变成 \(\sum \min(a_i+b_j,c_i+d_j)\)

如果我们选择第一项,说明 \(a_i+b_j\le c_i+d_j\)

\[ c_i+d_j-a_i-b_j \ge 0\\ (c_i-a_i)+(d_j-b_j)\ge 0\]

那么当 \((c_i-a_i)+(d_j-b_j)<0\) 的时候,我们会选择 \(c_i+d_j\) 这一项。

所以我们的答案式子可以很巧妙地变成:

\[\sum (a_i+b_j)+min(0,(c_i-a_i)+(d_j-b_j)) \]

如果 $(c_i-a_i)+(d_j-b_j)\ge 0 $,答案就取到第一项,否则刚好我们可以取到第二项。

\(a_i+b_j\) 可以 \(O(n+m)\) 算出,后面那部分排个序,然后扫描维护一下指针,也是 \(O(n)\),详见代码。

#include<bits/stdc++.h>
// #define DEBUG
#define sf scanf
#define pf printf
#define int ll
#define rep(x,y,z) for(int x=(y);x<=(z);x++)
using namespace std;
typedef long long ll;
const int N=1e5+5,inf=3e6;
int n,m;
int a[N],b[N],c[N],d[N];
int w1[N],w2[N];
ll s;
ll ans;
signed main(){#ifdef DEBUG// freopen("ex_A1.in","r",stdin);freopen("in.txt","r",stdin);freopen("a.out","w",stdout);#endifsf("%lld%lld",&n,&m);rep(i,2,n) sf("%lld",&a[i]);rep(i,1,m) sf("%lld",&b[i]);rep(i,1,n) sf("%lld",&c[i]);rep(i,2,m) sf("%lld",&d[i]);a[1]=inf,d[1]=inf;ans-=min(a[1]+b[1],c[1]+d[1]);rep(i,1,n) ans+=a[i]*m,w1[i]=c[i]-a[i];rep(i,1,m) ans+=b[i]*n,w2[i]=d[i]-b[i],s+=w2[i];sort(w1+1,w1+n+1);sort(w2+1,w2+m+1);int r=m;rep(i,1,n){while(w2[r]+w1[i]>=0&&r>=1) {s-=w2[r];r--;}ans+=s+w1[i]*r;}pf("%lld\n",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

自动加载类文件时发生错误,类名【core\\basic\\Kernel】

当你使用PbootCMS时遇到了自动加载类文件时发生的错误,具体错误信息如下:自动加载类文件时发生错误,类名【core\\basic\\Kernel】这个问题通常是由于Kernel.php文件丢失或被误删除导致的。特别是在阿里云虚拟主机环境下,可能会因为安全策略而删除某些文件。以下是详细的解决…

算法与数据结构——归并排序

归并排序 归并排序(merge sort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。 *合并阶段**:当子数组长度为1时终止划分,开始合并,持续地讲左右两个较短…

[ABC274G] Security Camera 3

无。[ABC274G] Security Camera 3 给你一个 \(n\times m\) 的网格图,\(n,m\le 300\),每个空地上可以放任意多个任意方向的监控,一个监控视野覆盖对应方向最长连续空地,问监控覆盖所有空地最小化监控数量。 对于一个极长的连续空地,我们一定是在边边放置一个监控,而且两边…

manim边学边做--图形间集合关系

几何图形间的集合关系,是数学和几何学中的一个基本概念, 通过计算不同形状(如圆形、矩形、三角形等)的交集和并集等关系,可以实现复杂的图形处理和视觉效果。 manim中提供了4种计算几何形状间集合关系的模块:Difference:从形状A中减去与形状B相交的部分 Exclusion:减去…

java窗口登录界面实现随机验证码

创建窗口内容及验证码更换 代码示例: package frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Jframe…

【VMware ESXi】使用 esxtop 杀死 ESXi 主机中卡死和不响应的虚拟机。

最近在家里的 Homelab 主机上进行 VMware Cloud Foundation 相关测试,由于 CPU 超负荷使用,某个别虚拟机时不时的会出现卡死和不响应等现象,进而导致了测试的失败并影响了相关实验的进度。比如,下图所示的嵌套 ESXi 虚拟机,本来运行好好的,由于资源不足,该虚拟机便出现了…

「TAOI-2」Ciallo~(∠・ω )⌒★ 题解

手玩了一个小时终于做出来了,这不得写一篇题解记录一下?? 下面设 \(s\) 的长度为 \(n\),\(t\) 的长度为 \(m\)。 考虑分类讨论: 如果 \(s\) 中有一个子串 \(s\) 与 \(t\) 完全相同(可以用哈希进行比较),设 \(s\) 是 \(s\) 的第 \(l\) 到第 \(r\) 个字符组成的字符串,则…

伯俊开发回忆录---VIP充值退款增加短信验证逻辑

一、前提总部财务需要增加对VIP卡充值退款的管控,防止资金被异常盗用, 1、针对VIP充值退款获取验证码,表单增加验证码字段 2、系统随机生成6位数验证码并生成提醒信息通过公司发送平台进行发送 三、校验规则未输入验证码不允许提交 验证码校验不通过提示重新输入