[JOISC 2019 Day3]指定城市

指定城市

题解

这题其实挺水的。

很明显,没被选的边的边权和最小也就是求出所有被选的边的边权和最大。

对于subtask2:也就是求只有一个点为指定点的情况。也就是求出所有点到他需要建的边。我们很容易求出对于一个固定点的所有儿子的子树上的点到他的和。这个一个dfs就可以解决。那么我们是否可以通过它父亲为root时的和求出它为root时的和吗?当然可以的。我们只需要再进行一次dfs,将它本身从树上切出去,然后再连到它本身就可以了。具体来说就是:

sum_{v}= (sum_{u}-sum_{v}-paid_{u\rightarrow v})+paid_{v\rightarrow u}+ sum_{v}

这样,O\left(n \right )就可以解决问题了。

对于subtask3:即求两个点为指定点的情况。我们很容易从subtask 2中发现,对于一个点为root时的情况,当选择两个不在同一子树的叶节点时,肯定有一种情况是最大的。我们只需要维护对于一个点它子树上最深的叶节点,在维护其父亲时选择其父亲的

posted @ 2020-04-27 16:41  StaroForgin  阅读(17)  评论(0)    收藏  举报  来源