題意
傳送門 poj 3621 sightseeing cows
題解二分答案,問題轉化為判定滿足圖中存在乙個環,滿足下式的最大的 xxx∑
fi∑t
j>
x\frac>x
∑tj∑f
i>
x 若環上存在重複經過的點,其 f
if_i
fi 只算一次,圖中點、邊數量不同。出現上述情況時,環由至少兩個簡單環構成。假設兩個環上 fi,
ti
f_i,t_i
fi,ti
的和分別為 x1,
y1
x_1,y_1
x1,y1
和 x2,
y2
x_2,y_2
x2,y2
,環的某個交點為 p
pp,則有 max(
x1y1
,x2y
2)≥x
1+x2
y1+y
2>x1
+x2−
fpy1
+y
2\max(\frac,\frac)\geq \frac>\frac
max(y1
x1
,y2
x2
)≥y
1+y
2x1
+x2
>y1
+y2
x1
+x2
−fp
可以觀察到取簡單環時答案更優,此時環上點、邊數量相同。按照 0/1
0/10/
1 分數規劃的思想,將上式轉換為 ∑(t
ix−f
i)
<
0\sum (t_ix-f_i)<0
∑(tix
−fi
)<0 spf
aspfa
spfa
判定圖中是否存在負環即可。
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
1005
, maxm =
5005
, inf =
0x3f3f3f3f
;const
double eps =
1e-4
;int n, m, f[maxn]
, cnt[maxn]
;int tot, head[maxn]
, to[maxm]
, t[maxm]
, nxt[maxm]
;double cost[maxm]
, ds[maxn]
;bool in[maxn]
;void
inline
add(
int x,
int y,
int t)
bool
spfa()
}}return0;
}bool
judge
(double x)
intmain()
printf
("%.2f\n"
, ub)
;return0;
}
poj 3621 最優比率環
思路 之前做過最小比率生成樹,也是屬於0 1整數劃分問題,這次碰到這道最優比率環,很是熟悉,可惜精度沒控制好,要不就是wa,要不就是tle,鬱悶啊!實在是懶得碼字,直接copy吧 題目的意思是 求乙個環的除以,使得那個環在所有環中除以最大。令在乙個環裡,點權為v i 對應的邊權為e i 即要求 i ...
poj3621 最優比率環
這道題的意思是給你乙個圖,有點權和邊權,你的任務是求乙個圈,使得這個圈的點權和比邊權和最大,我們依然可以使用01規劃的知識,將一條邊的權值變為ai mid bi,看看這個圖裡面有沒有正環,有的話說明還存在更優的解,這裡的正環問題可以將邊權值取反變成負環問題,如下 include include in...
POJ3259負環判定
題意 有n個頂點,m條邊,然後有w個洞,過每個洞的時間為 ti,求是否會時光倒流 分析 就是求是否存在負圈,用bellman floyd判定是否存在負圈即可,注意是無向圖,所以路徑是雙向可達的 1 include 2 include 3 include 4 include 5 include 6 i...