費用流模板

2021-09-23 23:09:00 字數 1545 閱讀 5425

我借鑑了一些大神的**也就是他們經常用的模板。。。

費用流模板

#include#includeusing namespace std;

const

int oo=1e9;

const

int mm=11111;

const

int mn=888;

int node,src,dest,edge;

int ver[mm],flow[mm],cost[mm],next[mm];

int head[mn],dis[mn],p[mn],q[mn],vis[mn];

/**這些變數基本與最大流相同,增加了

cost 表示邊的費用,

p 記錄可行流上節點對應的反向邊

*/void prepare(int _node,int _src,int _dest)

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

/**以上同最大流*/

/**spfa 求最短路,並用p 記錄最短路上的邊*/

bool spfa()

return p[dest]>-1;

}/**源點到匯點的一條最短路即可行流,不斷的找這樣的可行流*/

int spfaflow()

return ret;

}

但是還有下面這個**好像比上面的快一點。。。

#include 

#include

using

namespace

std;

const

int oo=1e9;//無窮大

const

int maxm=1111111;//邊的最大數量,為原圖的兩倍

const

int maxn=2222;//點的最大數量

int node,src,dest,edge;//node節點數,src源點,dest匯點,edge邊數

int head[maxn],p[maxn],dis[maxn],q[maxn],vis[maxn];//head煉表頭,p記錄可行流上節點對應的反向邊,dis計算距離

struct edgenode

edges[maxm];

void prepare(int _node,int _src,int _dest);

void addedge(int u,int v,int f,int c);

bool spfa();

inline

int min(int a,int b)

edge=0;

}void addedge(int u,int v,int f,int c)

bool spfa()}}

return p[dest]>=0;

}int spfaflow()

for (int i=p[dest]; i>=0; i=p[edges[i].to])

ret+=delta*dis[dest];

}return ret;

}

費用流模板

const int oo 1e9 無窮 const int mm 11111111 邊 const int mn 888888 點 int node,src,dest,edge int ver mm flow mm cost mm nex mm int head mn dis mn p mn q m...

費用流(模板)

費用流模板 spfa不停找當前從s到t的最小費用路,然後重新整理最大流 這裡把每條邊的cost為0,同樣就可以求最大流,不過有點慢 include include include include include include include include include include incl...

網路流 費用流模板

中求的是最小費用最大流,求最大費用最大流只需要在設定邊權時設定為原權值的相反數,執行一次最小費用最大流,計算得出最小費用的相反數就是要求的最大費用。u x v x w x c x 分別表示 x 號邊的出發點,到達點,權值和殘量。1 intspfa 29 dis s 0 10 head tail 1 ...