CF733F Drivers Dissatisfaction 题解
题目大意:
给定一个 N N N 个点 M M M 条边的无向图,保证图联通。每条边有两个属性 w i w_i wi 和 c i c_i ci ,表示使这条边的权值每降低 1 1 1 要花费 c i c_i ci 的花费。现在你有一个总费用 S S S ,你可以降低某些边的权值(可以降为负数,且总费用不得超过 S S S ) 。问降低权值后,这张图可得到的最小生成树权值是多少,并且输出选为最小生成树中的边的编号及权值。
解析
首先明确一点:题目中说可以降低某些边的权值,其实如果我们只选 c i c_i ci 最小的那条边,并只降低它的权值,这样一定可以使权值降低的最多(一点贪心的思想)。
我们可以首先找出这张图的最小生成树,并将在树上的边标记。然后,我们考虑降低哪条边的权值。
-
如果降低树边的权值
其实非常好做。由开头所讲,只需要找到树边中 c i c_i ci 最小的那条边,将其 w i w_i wi 减少 S c m i n \frac {S}{c_{min}} cminS 即可。
-
如果降低非树边的权值
这种情况稍微有些麻烦,我们来看下面这张图:
黑色的边表示树边,而红色的这条边表示我们选择的要降低权值的这条边。
由树的性质,我们不难发现:给树上两点间加上一条边后,便会生成一个环,由加上的边与两点间简单路径组成。要想其重新变回一棵树,那么必须从两点间的简单路径上去删除一条边。由贪心的思想,我们知道,要是最后答案最小,那么删去的边一定是两点间简单路径上权值最大的边。
于是,我们可以枚举每一条非树边,找到其连接的两点的树上简单路径上权值最大的边,计算备选答案。
备选答案就是 s u m − w m a x + w i − S c i sum-w_{max}+w_i-\frac{S}{c_i} sum−wm