题目大意:大概是这样的,一棵树n个点,每个点有点权val[i]和cost[i],给定一个m,对于每颗子树,计算出一个w值,w的计算方法为(val[i]*k),其中k为i子树下,最多能取出的使得cost的和小于等于m点的个数。
解题思路:假如,我们能将一颗子树的每个点,以cost为key,建成平衡树,那么计算答案想必还是比较简单的吧。但是我们不能给每颗子树建一棵平衡树,那么我们就从叶子节点开始计算,然后往上合并,合并两棵树时,将小的往大的里面一个个的插。
#include
#include
#include
#include