对于每条河流,要让它排名最靠前,那么显然它必须要延伸到根. 设第$i$条河流到根的距离为$d[i]$,对于每个节点,如果存在一条河流比$d[i]$长,那么让它延伸会使答案最小,否则要选择一条最短的河流来进行延伸. 设$f[i]$表示每个节点往外延伸的河流的长度的最小值,可以通过树形DP求出. 从小到大考虑每个$d$,取出所有超过了上一个$d$的限制,但是满足当前的$d$限制的临界点,这些点将不再是临界点. 若一个点所有的儿子都不是临界点,那么它的将变为临界点. 用堆按$f$从小到大维护临界点即可…