模板 最小費用流

2022-06-08 20:39:14 字數 1180 閱讀 1908

最小費用流:在網路中為每條邊加上乙個費用,當流量固定為f時費用的最小值。

模板一:通過bellman-ford演算法計算最短路,並且沿著最短路增廣。

時間複雜度為\(o(f|v||e|)\)

const int maxn=1010,inf=0x3f3f3f3f;

struct edge;

int n,dist[maxn],prevv[maxn],preve[maxn];

vectorg[maxn];

void add_edge(int from,int to,int cap,int cost));

g[to].push_back((edge));

}int min_cost_flow(int s,int t,int f)}}

}if(dist[t]==inf) return -1;

int d=f;

for(int v=t;v!=s;v=prevv[v])

f-=d;

res+=d*dist[t];

for(int v=t;v!=s;v=prevv[v])

}return res;

}

模板二:通過dijkstra演算法計算最短路,並且沿著最短路增廣。

時間複雜度為\(o(f|e|log|v|)\)

#define pii pairconst int maxn=1010,inf=0x3f3f3f3f;

struct edge;

int n,h[maxn],dist[maxn],prevv[maxn],preve[maxn];

vectorg[maxn];

void add_edge(int from,int to,int cap,int cost));

g[to].push_back((edge));

}int min_cost_flow(int s,int t,int f));}}

}if(dist[t]==inf) return -1;

for(int v=0;vint d=f;

for(int v=t;v!=s;v=prevv[v])

f-=d;

res+=d*h[t];

for(int v=t;v!=s;v=prevv[v])

}return res;

}

最小費用流模板

想看更多模板?和最大流模板對比著看 最大流模板 dinic 貼上最小費用流模板 const int oo 1e9 const int mm 11111111 const int mn 888888 int node,src,dest,edge int ver mm flow mm cost mm n...

模板)最小費用流

最大流 spfa結合體,小心即可。include include include include include include using namespace std struct edge vector g 5010 int dis 5010 prevv 5010 preve 5010 n,m,...

模板 最小費用最大流 費用流

給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。既然是模板題,那麼資料肯定很水。我ek spf aek spfa 都過了。費用流其實就是最大流改乙個spf aspf a而已,很簡單。include include include in...