UVa 1658 海軍上將(最小費用最大流)

2022-06-20 22:06:12 字數 1212 閱讀 5116

題意:給出乙個v個點e條邊的有向加權圖,求1~v的兩條不相交(除了起點和終點外公共點)的路徑,使得權和最小。

思路:把2到v-1的每個點拆分為兩個節點,容量為1,也就是只可以用一次,費用為0,然後求1到v的流量為2的最小費用流。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;89

const

int maxn = 10000 + 5;10

const

int inf = 0x3f3f3f3f;11

12 typedef long

long

ll;13

14struct

edge

18};

1920

struct

mcmf

2136

37void addedge(int

from, int to, int cap, int

cost)

3845

46bool bellmanford(int s, int t, int &flow, ll &cost)

4764}65

}66}67

if (d[t] == inf) return

false

;68 flow +=a[t];

69 cost += (ll)d[t] *(ll)a[t];

70for (int u = t; u != s; u = edges[p[u]].from)75

return

true;76

}7778void mincostmaxdflow(int s, int t, int limit, ll &cost)

83}t;

8485

intmain()

8696

for (int i = 0; i)

97105

ll cost;

106 t.mincostmaxdflow(0, n - 1, 2

, cost);

107 printf("

%lld\n

", cost);

108}

109return0;

110 }

UVA 1658 Admiral 海軍上將

題目大意 給出乙個v 3 v 1000 個點e 3 e 10000 條邊的有向加權圖,求1 v的兩條不相交 除了起點和終點外沒有公共點 的路徑,使得權和最小。如圖11 15所示,從1到6的兩條最優路徑為1 3 6 權和為33 和1 2 5 4 6 權和為53 摘自 劉汝佳演算法競賽入門經典 方法 將...

uva 1658 Admiral (最小費最大流)

題目大意 在圖中找出兩條沒有交集的線路,要求這兩條線路的費用最小。解題思路 還是拆點建圖的問題。首先每乙個點都要拆成兩個點。比如a點拆成a a 起點和終點的兩點間的容量為2費用為0,保證了僅僅找出兩條線路。其餘點的容量為1費用為0,保證每點僅僅走一遍,兩條線路無交集。然後依據題目給出的要求繼續建圖。...

uva10806 (最小費用最大流)

題意 從1到n 再從n到1 不經過重複的邊 如果是點就是旅行商問題了 問最短路 思路 最小費用最大流 建立乙個超級源 它的容量為2,到第乙個點的費用為0 然後每個連線的點的容量為1 只要找出兩條最小費用的路 那麼就可以了。include using namespace std include inc...