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