Link
Solution
可以看出,每个点的子树怎么装最快是一个独立的子问题。
所以现在考虑的就是在每个根节点如何安排每个子树的安装顺序
每个子树最后完成的时间,是进入的时间。
而整个子树完成的时间,是
子树进入的时间是遍历完之前所有子树的时间
一开始的想法是:
如果本身装机时间就长,还要等别的子树,那肯定最后是最慢的?
于是就按照装机时间排序贪心,WA。
考虑一种极端情况:有一个超大的子树,每个点安装的时间都是,但是遍历很慢,凭此rank1。如果先安装了这个,别的就白等了。
于是启发采用新的策略:按照排序,也就是子树安装的时间除去遍历的时间。这样就对了。
具体地说
有一个的序列,每个对答案的贡献是
则
设最大值在点取得,设与交换可以使得最大值在取得且变小
感觉不靠谱。。。能否给个证明。。
Tips
如果可能的话,要科学地贪心。 想一些具体的边界情况试着叉掉做法。
Code
1 |
|