無向圖,邊有權值 (浪漫值)。需刪除一些邊使 s、t 不連通。優先最小化刪除邊權值和 (即最小割),次優先最小化刪除邊數量。輸出 (總權值 - 最小割權值) / 割邊數量。
minCut。cnt。cap * C + 1 (C 足夠大,如 10000)。跑一次最大流,maxflow / C = minCut,maxflow % C = cnt。
// 第一次最大流 (Dinic)
int maxflow1 = dinic(s, t);
if (maxflow1 == 0) { puts("Inf"); continue; } // 原本不連通
// 構建第二層圖:殘留網路中 cap==0 的邊(割邊候選)設容量1,其餘 INF
for (int i=0; i
兩次最大流,N ≤ 50, M ≤ 1000,Dinic 極快。