P4951 Earthquake 经典题目 /01分数规划小记

01分数规划。

和最优比率生成树比较相似。

设选了的边集为\(S\),答案为\(k\)则有:

\(k\leq \frac{f-\sum_{i \in S}c_i}{\sum_{i \in S}t_i}\)

移项得:

\(f-\sum_{i \in S}{c_i-k*t_i} \ge 0\)

我们发现:

对于\(k\)的取值\(k_1\)和\(k_2\),当\(k_1 > k_2\)时,\(k_1\)满足上面的式子大于0时,\(k_2\)肯定可以满足。

所以答案有单调性

我们将边权按照式子里赋值为\(c_i-k*t_i\).

显然我们想要使得上面的式子有关\(k\)的部分的值更小,且让选出来的图联通,那么我们就使用最小生成树即可。

对于答案\(k\),因为有单调性,所以直接二分即可。

时间复杂度:\(O(n\log^2_2n)\).

代码

另外,还有一道与图论结合的题目:

这个

一看:最小均值环。

若边集合选了\(f\)条边则有:

\(k\leq \frac{f-\sum_{i \in S}w_i}{f}\)

移项得到:\(k*f \leq \sum_{i \in S}{w_i}\)

又得:\(0 \leq \sum_{i \in S}{w_i-k}\)

按照刚才的套路,令新边权\(p=val-k\),\(val\)为原来的边权,\(k\)为答案。

用SPFA判负环,若有负环,则代表有平均值小于\(k\)的环,我们按照二分上套路即可。

代码

大概就到这里了...

上一篇:python求100~999以内的水仙花数,要求用循环语句和判断语句


下一篇:数据分析中数据异常的种类,第三个你一定想不到~