CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)

Description

给出一棵 n 个结点的树,点 i 有正权值 wiw_iwiwiw_iwi 互不相同。
除了权值最小的点,保证每个点 u 都有一个邻点 v 使得 wvw_vwv < wuw_uwu
构造一棵树,最小化代价:

  • 对于每个点 u,产生 degu×wudeg _u \times w_udegu×wu 的代价,其中 degudeg _udegu 是构造的树中 u 的度数。
  • 对于每条边 (u, v),产生 ⌈log2dis(u,v)⌉×min(wu,wv)⌈log_2dis(u, v)⌉ \times min(w_u, w_v)log2dis(u,v)×min(wu,wv) 的代价,其中dis(u, v) 是给出的树中 u, v 的距离。

n ≤ 5×1055 \times 10^55×105

Solution

  • 首先要会利用题目中给的 wv<wuw_v<w_uwv<wu 的性质,可以发现这个性质在树上加上只有一个最小值的条件是可以得到这个结论的:除最小值外,每个点都有且仅有一个与他相邻的点 v 权值小于它。
    因为对于点 u ,如果有一个点 v 小于它,那么就要需要另外一个点去小于 v ,那这种依赖只会在最小值的时候停止,但是整棵树只有一个最小值,所以每个点也只能有且仅有一个点小于它。
  • 于是题目那个描述诡异的限制变成了:以权值最小的点为根,每个点的权值均大于父亲权值。
  • 把点的代价放进边:(u, v) 代价为(⌈log2dis(u,v)⌉+1)∗min(wu,wv)+max(wu,wv)(⌈log_2dis(u, v)⌉ + 1) ∗ min(w_u, w_v) + max(w_u, w_v)(log2dis(u,v)+1)min(wu,wv)+max(wu,wv)
  • 按照 kruskal,对于任意一点 u,与 u 相连的最小权值的边 (u, v) 一定在 MST 中。
  • 枚举每个点,找与其相连的最小权值的边:
  1. 如果一个点 x 选中了它子树中的某个点相连,那么它还不如选择权值更小的祖先,代价更小。

  2. 如果一个点 x 选中了深度小于它的非祖先节点,那么它还不如从它选择的这个节点往上走,走到一个离它最近的,是 x 的祖先的节点,因为这个新节点肯定比原来选择的节点距离 x 更近,且权值更小,所以显然更优。

  • 因此对于除根结点外的所有点 u,v 一定是它的 2k2^k2k 级祖先或者根结点。倍增求解。
  • 这些边恰好组成 MST,直接枚举找到它们。

Code

#include<iostream>
#include<cstdio>
using namespace std;
const int N=5e5+5;
const long long inf=1e18; 
struct Edge{int v,nxt;
}edge[N<<1];
int n,head[N],cnt,w[N],rt,fa[N][22],dep[N];
long long res,ans;
void add(int u,int v){edge[++cnt].v=v;edge[cnt].nxt=head[u];head[u]=cnt;
}
void dfs(int u){if(u!=rt){int j;for(j=1;j<=20;j++){if(dep[u]<(1<<j)) break;fa[u][j]=fa[fa[u][j-1]][j-1];}res=inf;for(j=0;j<=20;j++){if(dep[u]<(1<<j)) break;res=min(res,1ll*(j+1)*w[fa[u][j]]+w[u]);}if(dep[u]!=(1<<j))res=min(res,1ll*(j+1)*w[rt]+w[u]);ans+=res;}for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].v;if(v==fa[u][0]) continue;fa[v][0]=u;dep[v]=dep[u]+1;dfs(v);}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&w[i]);if(!rt) rt=i;else if(w[rt]>w[i]) rt=i;}for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(rt);printf("%lld\n",ans);return 0;
} 

参考文章:
https://www.luogu.com.cn/blog/qlwpc/cf1088f-ti-xie

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

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

相关文章

搭建基于云端的中间层以支持跨平台的智能视觉服务

不断演进的应用场景初级应用场景—宅在家里场景&#xff1a;Bob同学有一天在网上看到了一张建筑物的图片&#xff0c;大发感慨&#xff1a;"好漂亮啊&#xff01;这是哪里&#xff1f;我要去亲眼看看&#xff01;"Bob同学不想问别人&#xff0c;可笑的自尊心让他觉得…

YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/3 题目大意 给出两个字符串A,BA,BA,B&#xff0c;求它们的最长公共子序列。 解题思路 先考虑朴素的dpdpdp&#xff0c;设fi,jf_{i,j}fi,j​表示到AAA的第iii个&#xff0c;BBB的第jjj个时候的最长公共子序列长度…

牛客算法周周练4 题解

比赛链接 文章目录A [SDOI2016]齿轮B Rinne Loves XorC 阶乘D 小石的签到题E 装备合成A [SDOI2016]齿轮 B Rinne Loves Xor C 阶乘 两个方法 题解 D 小石的签到题 题解 E 装备合成 两个方法 题解

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

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3333lyflyflyf160160160100100100101010505050 总结 T1想到DP&#xff0c;但一开始想到的方法会TLE&#xff0c;后来想到可以减去一层&#xff0c;就A了 T2瞎想了一波&#xff0c;打了一个类似于FloyedFloyedFl…

高等数学超入门学习笔记

极限 百度百科 1.数列极限 百度百科 1.1 数列 1.2 数列极限 1.3 单调收敛原理 {xn}\{x_n\}{xn​}单调递增且{xn}\{x_n\}{xn​}有上界&#xff08;可以找到实数M使{xn}\{x_n\}{xn​}中任意一项小于M&#xff09;&#xff0c;{xn}\{x_n\}{xn​}收敛&#xff08;存在象限a&…

Microsoft宣布正式发布Linux on ASE

Microsoft宣布正式发布&#xff08;GA&#xff09;用于ASE&#xff08;应用服务环境&#xff0c;App Service Environment&#xff09;的Linux。该服务使客户可结合使用Linux上的应用服务&#xff08;App Service&#xff09;特性与ASE。在正式发布版之前&#xff0c;Microsoft…

YbtOJ#20236-[冲刺NOIP2020模拟赛Day9]红点蓝点【线段树,堆】

正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/4 题目大意 平面上nnn个红点&#xff0c;nnn个蓝点&#xff0c;对于没一个红点求一个与它纵坐标距离不超过ddd的一个点与它的曼哈顿距离最短。 解题思路 一个点分为两种情况&#xff0c;在询问点左边的红点要求横…

Rinne Loves Xor

链接&#xff1a; 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 第一行一个整数 N&#xff0c;表示数组 A 和 B 的长度。 第二行 N …

小麦亩产一千八(jzoj 3461)

小麦亩产一千八 jzoj 3461 题目大意 给你一个正整数序列&#xff1a;a0,a1,a2a_0,a_1,a_2a0​,a1​,a2​…… a0a_0a0​为1 a1a_1a1​为p axax−1ax−2(x>1)a_xa_{x-1} a_{x-2}(x>1)ax​ax−1​ax−2​(x>1) 现在给你三个数x&#xff0c;ax&#xff0c;yx&#xf…

Pipelines - .NET中的新IO API指引(一)

原文&#xff1a;https://blog.marcgravell.com/2018/07/pipe-dreams-part-1.html作者&#xff1a;marcgravell大约两年前&#xff0c;我发表了一篇关于.NET中即将到来的体验性新IO API的博文——在那时它被叫做"Channels"&#xff1b;在2018年的五月末&#xff0c;它…

[XSY] 分割(dfs树)

分割 题目相当于问 删掉两个点后 图是否仍然连通 割点问题&#xff0c;考虑用dfs树解决 设删去点u&#xff0c;v&#xff08;dfn[v]<dfn[u]&#xff09; 把 u, v 删去之后整棵树大概断成了几个部分&#xff1a; • v 上面到根的部分&#xff0c;以及上面挂着的那些东西&…

P4068-[SDOI2016]数字配对【二分,费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P4068 题目大意 nnn种数字&#xff0c;第iii个是aia_iai​&#xff0c;有bib_ibi​个&#xff0c;价值为ci∗cjc_i*c_jci​∗cj​ 如果一个数字axa_xax​和aya_yay​配对要求axay\frac{a_x}{a_y}ay​ax​​是一个质数且产生c…

三分法讲解

二分用到的挺多&#xff0c;三分用的少&#xff0c;但也不能忘。。。 二分我们常常用于一个具有单调性的情况中求解某值 而三分就像是求一个凸性或凹形函数时&#xff0c;来求那个凹凸点 一开始L0&#xff0c;Rinf&#xff0c;然后也是不断缩小L与R的范围&#xff0c;逼近最值…

秀姿势(jzoj 3464)

秀姿势 jzoj 3464 题目大意 有n个数&#xff0c;每个数都有一个分组&#xff0c;现在问你最多去掉k个分组后&#xff0c;做多有多少个数是连续的同组的 输入样例 9 1 2 7 3 7 7 3 7 5 7输出样例 4样例解释 总共有9个学生&#xff0c;最多只能刷一次学生。 若不刷&#x…

使用C#读写结构化的二进制文件

最近工作上遇到一个问题&#xff0c;就是有将近200万个CSV文件&#xff0c;每个CSV文件包含了成千上万条实验数据&#xff0c;CSV以一个不连续的整数值作为文件名&#xff0c;比如&#xff1a;1.CSV、2.CSV、3.CSV、5.CSV等等。另外又有200万个XML文件&#xff0c;每个XML文件的…

[XSY] 相似(DP套DP)

相似 在看这道题前&#xff0c;有必要先看一下DP套DP的入门题[uoj3864]Hero meet devil&#xff0c;附上两篇写得不错的题解&#xff1a; https://blog.csdn.net/Ike940067893/article/details/87863041 https://www.cnblogs.com/RabbitHu/p/BZOJ3864.html 可以发现&#xff…

P3295-[SCOI2016]萌萌哒【ST表,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3295 题目大意 一个nnn位的数字&#xff0c;mmm个条件给出两个完全相同的区间&#xff0c;求可能的数字数量。 解题思路 其实就是区间中的每个数字分别连边&#xff0c;但是这样显然会TTT。考虑通过消耗查询的复杂度来平衡…

牛客IOI周赛16-普及组

比赛链接 文章目录求导题目描述题解&#xff1a;猜数题意&#xff1a;题解&#xff1a;方法一 贪心方法二 暴力答题卡题意&#xff1a;题解&#xff1a;代码&#xff1a;求导 链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C …

【归并排序】休息(jzoj 3462)

休息 jzoj 3462 题目大意 给你一个序列&#xff0c;你每一回合把它划分成尽可能少的单调递减的序列&#xff08;第一次划分到的序列长度都是偶数&#xff09;&#xff0c;然后把每个序列翻转&#xff0c;问你把它变成单调递增的序列要翻转多少次 输入样例 6 5 3 2 1 6 4输…

Pipelines - .NET中的新IO API指引(二)

原文&#xff1a;Pipelines - a guided tour of the new IO API in .NET, part 2作者&#xff1a;marcgravell在上一章&#xff0c;我们讨论了以往的StreamAPI中存在的一些问题&#xff0c;并且介绍了Pipe,PipeWriter,PipeReader 等API&#xff0c;研究如何写出一个Pipe 并且从…