[关闭]
@owaski 2016-09-22T14:20:19.000000Z 字数 957 阅读 812

题解

Bubble Cup 9 - Finals [Online Mirror] B. R3D3’s Summer Adventure

很显然这是一棵树,而且个数是相同的。
想一下如果要求做法的话,我们有一个很好的贪心做法,就是最开始一棵空树,然后每次选权值最小的链,将其扩展出两个孩子。
仔细思考一下这个做法,我们发现假如我们给树上每个节点的权值定义为到根权值和,那么除去所有的叶子结点,其他的非叶子结点可以看成是权值从小到大依次出现的,因为根据前面的那个贪心做法,我们是从小到大扩展了所有的非叶子结点。
那么考虑非叶子结点权值和,假设根节点权值为,那么还要加上才能满足要求(因为考虑以某个节点为根的子树,那么他自己的贡献被计算了子树大小次,然而叶子结点是=非叶子结点+1的,因为这个1的差距我们要加上这个东西)。
那么现在我们的问题就是求出权值从小到大的个点的和即可,假设
考虑二分一下最大的权值,假设为,求出所有的结点个数,找到第一个的即可。
根据贪心原理,那么一条链上的个数不会超过,因此我们可以枚举的个数,然后求出个数的上界,求出这个东西:


求出了最大权值后,那么我们的答案就分成了两部分,一部分是等于的,另一部分是小于的。
等于的很好算,就是
考虑小于的,可以写成:

嗯,就是这样了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注