CF932F-Escape Through Leaf【树上启发式合并,CDQ分治,斜率优化dp】

正题

题面链接:https://www.luogu.com.cn/problem/CF932F


题目大意

nnn个点的一棵树,从xxx跳到yyy(要求yyyxxx的子树中)会产生Ax∗ByA_x*B_yAxBy的代价,求每个节点出发跳到某个叶节点的最小代价。


解题思路

考虑dpdpdp的话,那么有fx=fy+Ax∗Byf_x=f_y+A_x*B_yfx=fy+AxBy,这个式子可以考虑斜率优化,若y1y_1y1y2y_2y2优,那么有fy1−fy2By1−By2≥Ax\frac{f_{y_1}-f_{y_2}}{B_{y_1}-B_{y_2}}\geq A_xBy1By2fy1fy2Ax
也就是我们对于每个节点要维护一个子树里所有点构成的一个下凸壳。

考虑树上启发式合并+CDQ+CDQ+CDQ,我们要求一个序列使得被贡献的点排在贡献点的后面。维护一个序列,每次我们保留重子树的序列,然后再加入其它轻子树的序列,当到一个节点的头顶上是一条轻边时我们就对这个序列跑一次CDQCDQCDQ来维护凸壳,然后清空序列。需要注意的是对于二次扫描轻子树的节点需要标记不能在CDQCDQCDQ分治中被修改答案。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
using namespace std;
const ll N=1e5+10;
struct node{ll to,next;
}e[N*2];
ll n,tot,ls[N],a[N],b[N],f[N],siz[N],son[N];
ll cnt,q[N],p[N],v[N],st[N],rfn[N];
void addl(ll x,ll y){e[++tot].to=y;e[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(ll x,ll fa){siz[x]=1;for(ll i=ls[x];i;i=e[i].next){ll y=e[i].to;if(y==fa)continue;dfs(y,x);siz[x]+=siz[y];if(siz[y]>siz[son[x]])son[x]=y;}return;
}
bool cmp(ll x,ll y)
{return a[x]<a[y];}
bool cMp(ll x,ll y)
{return (b[x]==b[y])?(f[x]<f[y]):(b[x]<b[y]);}
double slope(ll x,ll y)
{return (double)(f[x]-f[y])/(b[x]-b[y]);}
void cdq(ll l,ll r){if(l==r)return;ll mid=(l+r)>>1,cnt1=l-1,cnt2=mid;for(ll i=l;i<=r;i++)if(rfn[p[i]]<=mid)q[++cnt1]=p[i];else q[++cnt2]=p[i];for(ll i=l;i<=r;i++)p[i]=q[i];cdq(l,mid);ll tot=0;for(ll i=l;i<=mid;i++){if(b[p[i]]==b[p[i-1]]&&i!=l)continue;while(tot>1&&slope(st[tot-1],st[tot])>slope(st[tot-1],p[i]))tot--;st[++tot]=p[i];}for(ll i=mid+1;i<=r;i++){if(v[p[i]])continue;while(tot>1&&slope(st[tot-1],st[tot])>-a[p[i]])tot--;ll x=p[i],y=st[tot];f[x]=min(f[x],f[y]+a[x]*b[y]);}cdq(mid+1,r);sort(p+l,p+1+r,cMp);return;
}
void calc(ll x,ll fa){p[++cnt]=x;rfn[x]=cnt;v[x]=1;for(ll i=ls[x];i;i=e[i].next){ll y=e[i].to;if(y==fa)continue;calc(y,x);}
}
void solve(ll x,ll fa,ll top){for(ll i=ls[x];i;i=e[i].next){ll y=e[i].to;if(y==fa||y==son[x])continue;solve(y,x,y);}if(son[x])solve(son[x],x,top);else f[x]=0;for(ll i=ls[x];i;i=e[i].next){ll y=e[i].to;if(y==fa||y==son[x])continue;calc(y,x);}p[++cnt]=x;rfn[x]=cnt;v[x]=(!son[x]);if(x==top){sort(p+1,p+1+cnt,cmp);cdq(1,cnt);cnt=0;}return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}memset(f,0x3f,sizeof(f));dfs(1,1);solve(1,1,1);for(ll i=1;i<=n;i++)printf("%lld\n",f[i]);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 2.1中基于角色的授权

授权是来描述用户能够做什么的过程。例如&#xff0c;只允许管理员用户可以在电脑上进行软件的安装以及卸载。而非管理员用户只能使用软件而不能进行软件的安装以及卸载。它是独立的而又与验证配合使用&#xff0c;需要身份验证机制。对于应用程序来说&#xff0c;首先需要进行…

CF449B Jzzhu and Cities(Dijkstra)

设每个点到1的距离为dis[x]dis[x]dis[x],特殊边为(1,vi,wi)(1,v_i,w_i)(1,vi​,wi​) 1、wi>dis[vi]w_i>dis[v_i]wi​>dis[vi​]的特殊边可以删除 2、widis[vi]且num[vi]>1w_idis[v_i]且num[v_i]>1wi​dis[vi​]且num[vi​]>1,特殊边可以删掉 思路上的偏差&…

Sunscreen

来源&#xff1a;牛客网 Sunscreen 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must co…

【dfs】无穷迷宫(jzoj 3924)

无穷迷宫 jzoj 3924 题目大意 有一个n*m的迷宫&#xff0c;有墙&#xff08;#&#xff09;&#xff0c;路&#xff08;.&#xff09;&#xff0c;和你的位置&#xff08;S&#xff09;&#xff0c;这个迷宫会复制无数份拼在一起&#xff0c;问你能不能不停地走下去 输入样例…

[2020.11.27NOIP模拟赛]拼图王【dp】

正题 题面链接:https://www.luogu.com.cn/problem/U142584 题目大意 nnn个010101串&#xff0c;按顺序分成两个序列&#xff0c;然后拼接成一个序列&#xff08;拼接串x,yx,yx,y的话就是变成一个前缀包含xxx&#xff0c;后缀包含yyy的最短的串&#xff09;。求最短长度。 解题…

分布式事务一致性解决方案

一、从数据一致性谈起↑一致性问题&#xff0c;“万恶之源”是数据冗余和分布并通过网络交互网络异常是常态。1、数据一致性的情形主库、从库和缓存数据一致性&#xff0c;相同数据冗余&#xff0c;关系数据库&#xff0c;为保证关据库的高可用和高性能&#xff0c;一般会采用主…

hihocoder1147 时空阵(bfs树+DP)

bfs树中&#xff0c;边只存在于同一层或相邻层的点之间 设f[i][j][k]f[i][j][k]f[i][j][k]为前iii层一共使用jjj个节点&#xff0c;其中第iii层有kkk个节点的合法方案&#xff0c;转移枚举每一层的连边方式&#xff0c;做到第LLL层即可。对于LLL 层之后的边可以随便乱连。&…

牛客网【每日一题】4月21日题目精讲 糖糖别胡说,我真的不是签到题目

试题 糖糖别胡说&#xff0c;我真的不是签到题目 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c; 其他语言262144K 64bit IO Format:%lld 题目描述 从前&#xff0c;有n只萌萌的糖糖&#xff0c;他们分成了两组一起玩游戏。…

近似乘积(jzoj 3925)

近似乘积 jzoj 3925 题目大意 给你一个集合A和n让你求不在集合A内的x、y、z&#xff0c;使∣n−xyz∣|n-xyz|∣n−xyz∣最小 输入样例 3 2 2 4 4 1 1 7 2 1 15 90输出样例 1 1 3 2 2 2 2 5 9数据范围 40% 的数据&#xff1a;1⩽m⩽10&#xff0c;1⩽n⩽100.1 \leqslant …

[2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/U142585?contestId37855 题目大意 nnn个数&#xff0c;求所有区间中位数的中位数。 解题思路 二分一个答案&#xff0c;然后如果一个区间的中位数≥mid\geq mid≥mid&#xff0c;那么这个区间一定是≥mid\geq mid≥mid的数比…

.net core 生成二维码

其实生成二维码的组件有很多种&#xff0c;如&#xff1a;QrcodeNet&#xff0c;ZKWeb.Fork.QRCoder&#xff0c;QRCoder等我选QRCoder&#xff0c;是因为小而易用、支持大并发生成请求、不依赖任何库和网络服务。既然是.net core 那当然要用依赖注入&#xff0c;通过构造函数注…

小雨坐地铁

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format:%lld 题目描述 小雨所在的城市一共有 m 条地铁线&#xff0c;分别标号为 1 号线&#xff0c;2 号线&#xff0c;……&…

计蒜客 91 地铁 HDU 5263 平衡大师(二分+网络流)

先说PPT的思路 PPT的思路源于这句话&#xff1a; 对每条边 (u, v)&#xff0c;连一条 (u, v) 容量为 1&#xff0c;费用为 1 的边。如果 流了表示删去这条边。 流过原图上的边表示删去这条边意味着什么呢&#xff1f; 令dif[u]u的出度-入度 如图&#xff0c;灰边表示原图上的…

开关灯(jzoj 3926)

开关灯 jzoj 3926 题目大意 有一个nl的灯网&#xff0c;你可以把按某一列的灯的按钮&#xff0c;然后这一列开的关&#xff0c;关的开&#xff0c;你也可以把某一行的灯和别的行的灯调换&#xff0c;问从当前状态到目标状态最少按多少个按钮 输入样例 3 3 2 01 11 10 11 0…

P4254-[JSOI2008]Blue Mary开公司【李超树】

正题 题目链接:https://www.luogu.com.cn/problem/P4254 题目大意 要求支持操作 插入一条直线。询问一个纵坐标最高的在直线上的点。 解题思路 李超树的模板题&#xff0c;大概就是标记永久化&#xff0c;对于一个位置midmidmid&#xff0c;我们看一下它与标记点在midmidmi…

asp.net core 外部认证多站点模式实现

PS&#xff1a;之前因为需要扩展了微信和QQ的认证&#xff0c;使得网站是可以使用QQ和微信直接登录。github 传送门 。然后有小伙伴问&#xff0c;能否让这个配置信息&#xff08;appid&#xff0c; appsecret&#xff09;按需改变&#xff0c;而不是在 ConfigureServices 里面…

牛客网【每日一题】4月22日 K-th Number

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 65536K&#xff0c;其他语言131072K 64bit IO Format:%lld 题目描述 Alice are given an array A[1…N] with N numbers. Now Alice want to build an array B by a parameter K…

纪中B组模拟赛总结(2020.2.09)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3666lyflyflyf120120120303030000909090 总结 T1敲了个并查集&#xff0c;然后被卡了&#xff0c;正解是dfs&#xff0c;十分难懂&#xff0c;好在洛谷有原题&#xff08;有一点差别&#xff09;&#xff0c;看…

P6030-[SDOI2012]走迷宫【高斯消元,tarjan,期望dp】

正题 题面链接:https://www.luogu.com.cn/problem/P6030 题目大意 nnn个点的一张有向图&#xff0c;求起点到终点的期望步数。保证每个强连通分量大小不超过100100100。 解题思路 显然如果是强连通分量那么显然需要用高斯消元。 先把强连通用tarjantarjantarjan缩起来&#…

如何让敏捷软着陆?

背景当前&#xff0c;敏捷已经成为了2018的热词&#xff0c;执行敏捷研发模式的项目多数都是从瀑布模型转型过来的&#xff0c;瀑布模型是一套根深蒂固的传统流程&#xff0c;如果硬着陆的话&#xff0c;很容易折翼。笔者在各类项目敏捷实施过程中&#xff0c;总结了一些接地气…