http://poj.org/problem?id=3621
大致题意:给出一个有向图,每个点都有一个点权,每条有向边也都有一个边权,要求出一个环使得环中点权之和与边权之和的比值最大。
思路:和最优比率生成树异曲同工。设点权是v[i],边权是e[i]。不同的是这里一个是点,一个是边。怎么像生成树一样把这两个值放到一起呢?可以把他们都转化到边上。同样的二分λ,每次给边重新赋权为v[i] - λ*e[i](v[i]是该边终点的点权)。因为要求比值最大,那么在这前提下于图中的所有环都<=0, 所以我们只需每次spfa判断是否有正环,若有说明λ偏小,否则λ偏大。其实每条边的权值取上述(v[i] - λ*e[i])的负值,然后spfa判负环也可以,试了下,时间上差不多。下面的代码判的是负环。
#include
#include
#include
#include
#include