# POJ3621_Sightseeing Cows
Posted xiwon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# POJ3621_Sightseeing Cows相关的知识,希望对你有一定的参考价值。
题意:
给定一张有向图,每个点有权值 (fun[i]) ,每条边有权值 (time[i])
要求找出一个环,使得环上所有点的点权和除以所有边的边权和最大
解:
首先,显然,这是一道01分数规划题
参照分数规划的套路
假定当前二分的值为 (mid) ,有环 (S=({v}, {e})) ,环有 (t) 个点和 (t) 条边
考虑是否存在 (S) 使得
此时答案应该大于 (mid)
若不存在这样的 (S) ,则
此时答案应该小于等于 (mid)
问题又来了,如何判断是否存在 (S) ?
有这样的办法:
在每次选定 (mid) 之后
新建一个与原图一样的图,但是没有点权,只有边权,并对边权值做如下修改
(forall e_{i}=edge(x -> y),quad weight(x -> y)=mid*time_{e_{i}}-fun_{x})
这样建图有什么好处?
这样,若要判定 (sum_{i=1}^{t}(mid*time_{i}-fun_{i})<0) ,刚好对应图中存在“负环”
由此,在新建的图上跑SPFA,有负环说明 (mid<frac{sum_{i=1}^{t}fun_{i}}{sum_{i=1}^{t}time_{i}})
没有则说明 (midgeqslant frac{sum_{i=1}^{t}fun_{i}}{sum_{i=1}^{t}time_{i}})
以上是关于# POJ3621_Sightseeing Cows的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3621 Sightseeing Cows | 01分数规划