題意:給定 N 個節點的無向圖,M 條邊及邊長。判斷是否存在包含所有節點的環(哈密頓環),若存在輸出最短環長,否則 "NO"。
原理:每個節點必須有一條入邊和一條出邊,構成若干環;最小費用流會傾向於合併成一個大環(若圖連通),費用即為環長總和。
struct Edge { int to, next, cap, flow, cost; };
bool spfa(int s, int t) { /* 最短路分層 */ }
struct Node { int f, c; } minCostMaxflow(int s, int t, int &cost) { /* 增廣 */ }
見原文,包含 init, addedge, spfa, minCostMaxflow, 主函數讀入多測試用例、建圖、輸出結果。