ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1088F Ehab and a weird weight formula

2022-02-21 08:00:43  阅读:167  来源: 互联网

标签:log text CF1088F times mathcal weird 代价 Ehab 函数


题面

给定一棵树,点有点权,其中这棵树满足除了权值最小的点外,每个点都有一个权值比它小的点与它相邻。
要求你重新构建这棵树,使得代价最小。计算代价的方法如下:
现在规定:

  • 一个点的代价为:\(\text{deg}_u \times a_u\),其中 \(\text{deg}_u\) 表示点 \(u\) 的度数,即与 \(u\) 直接相连的节点数。
  • 一条边 \((u,v)\) 的代价为 \(\lceil \log_2 \text{dis}(u,v) \rceil \times \min(a_u,a_v)\),其中 \(\text{dis}(u,v)\) 为 \(u\) 和 \(v\) 在原树中的距离。

一棵树的代价为点的代价 + 边的代价。
保证原树中权值最小的点唯一。
\(n \le 5\times 10^5\)。


题解

  生成树 最小生成树 图论

  将贡献算到边权中:每条边贡献为 \(\lceil \log_2 \text{dis}(u,v) \rceil \times \min(a_u,a_v) + a_u + a_v\)。

  以最小值节点为根,显然每个点只会向其祖先连边。

  而代价的 \(\log\) 函数决定了只要向 \(2^k\) 祖先连边就是最优的,正确性可以通过调整法证明。

  然后边数就是 \(\mathcal O(n \log n)\) 的了,如果要排序 Kruskal,那么就是 \(\mathcal O(n \log ^2 n)\)。但是我们可以在每个点处理出最佳的边,然后排序的 \(\log\) 就没有了。复杂度 \(\mathcal O(n \log n)\)。

启示

  1. 奇怪的贡献函数启示了要对应其进行分析;如果贡献函数过于复杂(比如这个题目的点和边的贡献),那么可以考虑简化成一个函数;如果贡献函数看起来比较奇特,那么可以想一想这个函数的性质是什么(决策单调性?是否有一些最优的决策点?)
  2. \(\mathcal O(n^2)\) 条边的最小生成树的一种优化方式就是考虑简化连边数量;另一种可以使用 Boruvka 算法(“别乳卡”算法!)。

标签:log,text,CF1088F,times,mathcal,weird,代价,Ehab,函数
来源: https://www.cnblogs.com/werner-yin/p/15917335.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有