赞
踩
首先找到这棵树的所有叶节点并按照它们的 d f s dfs dfs序排序。不难发现,对一个节点进行控制等价于可以将叶子序列中的一段区间做加一或减一操作。
区间修改似乎很烦,于是差分一下。此时对 [ l , r ] [l,r] [l,r]做操作等价于将差分数组的第 l l l位加 1 1 1,第 r + 1 r+1 r+1位减 1 1 1,于是从 l l l到 r + 1 r+1 r+1连一道边权为 w u w_u wu的无向边。由于 r + 1 r+1 r+1超过了叶节点的数量,所以我们要新建一个虚叶节点。现在我们要删去一些边使得最终的控制方案合法。
考虑何时控制方案合法。显然,最终的连边方案要是连通的。更进一步,最终的连边方案一定是一棵树。因为如果不是一棵树而是一个边数不小于点数的图,那么将其变成它的生成树后不仅没有影响其合法性,还让代价减少。
所以我们跑出最小生成树即可。对于每条最小生成树中的树边一定属于一种最优连边方案。对于剩下的边依次考虑:当加入一条非树边 x , y x,y x,y后会与树边形成一个环,如果在这个环上的所有树边的边权的最大值不小于这条非树边的边权,那么此条非树边就属于一种最优连边方案,否则不属于。
考虑查询“形成的环上的最大值”等价于查询从 x x x到 y y y的路径上的节点的最大值。这是一个很经典的树剖模型,但是树剖里面套的并不是带一个 log \log log的线段树,而是 O ( n log n ) O(n \log n) O(nlogn)预处理, O ( 1 ) O(1) O(1)查询的 S T ST ST表(RMQ)。
总时间复杂度为 O ( n log n ) O(n \log n) O(nlogn)。
一道非常妙的图论建模题,我是真的没想到(没啥好说的,就是菜)。
对于这一类任意区间加, 区间减,能否得到任意方案的题,往往都是转化为差分然后连边,接着就会有各种各样的性质。比如本题的一个重要性质就是最优连边方案一定形成了一棵最小生成树。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。