POJ 2135 Farm Tour 最小費用流

2021-05-27 20:20:09 字數 970 閱讀 7495

若不是看了題目分類,很難想到這題和網路流掛上鉤,乍一看是求2遍最短路,但是很明顯求最短路可能是錯誤的。

題意:fj(又是他》<)想帶朋友參觀自己的農場,農場有n個點,m條邊,要從1點到n點,再從n點走回來,且2次不能走相同的路,問最小的花費時間。

題解:費用流,最小費用即為答案

我的構圖方法:定義源點和匯點,

1.所有邊權值為1,費用為所花費的時間。

2.將源點與1連線邊權值為2,費用0,n與匯點相連,權值為2,費用為0.

這樣保證了從1到n恰好有2條邊不重複的可行流,構成了乙個由1到n再到1的迴路。

#include #include #define min(a,b) (a>b?b:a)

const int maxn=1005;

const int maxm=60050;

const int inf=0x4fffffff;

struct edgeedge[maxm];

int head[maxn],cnt;

void addedge(int u,int v,int w,int c)

int dis[maxn],pre[maxn];//最小費用和前驅結點

int alpha[maxn];//標記

int que[maxn],qhead,qrear;

int spfa (int s,int e)//源匯點

edge[maxm];

int head[maxn],cnt;

void addedge(int u,int v,int w,int c)

int dis[maxn],pre[maxn];//最小費用和前驅結點

int alpha[maxn];//標記

int que[maxn],qhead,qrear;

int spfa (int s,int e)//源匯點

{ //尋找費用增廣,沒有返回-1;

for (int i=0 ; i

poj2135Farm Tour 最小費用最大流

題目要求從1到n走一遍再從n到1走一遍而且有重邊,相當於從1到n走兩邊 所以加乙個源點0 1,費用為0,流量為2 加乙個匯點n 1 n,費用為0,流量為2 中間的邊流量為1 只走一遍 費用為c 然後一遍0 n 1的費用流 要注意是無向圖,所以乙個輸入有4條邊 a b c,1 b a c,0 b a ...

POJ 2135 Farm Tour 最小費用流

題意 n個點,m條邊,從1號點出發到n號點,再走回來,且不能走走過的路,求最小路徑權和 最小費用流,用流量為1 限制每條邊只能走一次,建立超源匯點,源點連1號點的流量為2,費用0,匯點同理。其他邊的流量為1,費用為權值。建立超源匯點且權值為2目的是因為起終點經過2次 雖然這裡是點經過2次而題目是邊 ...

POJ 2135 Farm Tour 最小費用流

很容易看出來時最小費用流,但這裡要注意是無向邊,所以要建立兩條邊。為了滿足退流時,花費還是最小,反向邊的花費要為相反數。1 status g ac 32ms 980kb 2 include3 include4 include 5 include6 include7 include 8 include...