可并堆.
如果对于每个骑士,我们都求出他在哪个城池牺牲,那么两个问题都可以解决.
对于树上的每个节点,开一个可并堆,维护当前这个点上所有骑士的战斗力.
对树进行 $dfs$ .
先将堆中的战斗力修改,然后弹出在当前节点牺牲的骑士,更新答案,再将剩余的骑士合并到父亲上去.
加或者乘一个正数是不会改变战斗力的大小关系的,所以修改时在根节点处打标记就可以了,堆的形态不会变化.
最后还要处理攻占根节点后仍未牺牲的骑士.
1 | //%std |
夢はここに 思い出は遠くに
可并堆.
如果对于每个骑士,我们都求出他在哪个城池牺牲,那么两个问题都可以解决.
对于树上的每个节点,开一个可并堆,维护当前这个点上所有骑士的战斗力.
对树进行 $dfs$ .
先将堆中的战斗力修改,然后弹出在当前节点牺牲的骑士,更新答案,再将剩余的骑士合并到父亲上去.
加或者乘一个正数是不会改变战斗力的大小关系的,所以修改时在根节点处打标记就可以了,堆的形态不会变化.
最后还要处理攻占根节点后仍未牺牲的骑士.
1 | //%std |