UVA1205 Color a Tree 题解
我们知道,为使染色代价最小,则树中除根结点外的权值最大的点,一定会在它的父节点之后立即被染色。
那么是不是可以“每一步都在可以被染色的节点中选择权值最大的染色”呢?显然这是错误的。很容易就能构造出一个反例:一个权值很小的节点下边有许多权值巨大的节点,而另一个权值较大的却没有子节点。
因为树中权值最大的点和它的父节点的染色是连续进行的,所以我们可以将这两个点合并,合并得到的新点设为两点权值的平均值。
进一步的,我们引入一个“等效权值”的概念。记点
根据开头提到的性质,我们可以维护一个优先队列,不断取出可以被染色的点中
code
代码。
Tips:多测不清空,爆零两行泪。