網路流 最大流 最小割 最小費用流

2021-09-01 14:26:53 字數 2158 閱讀 3620

sap + gap 鄰接表:

sap + gap 鄰接矩陣:

dinic 鄰接矩陣:

dinic 鄰接表:

介個人寫的敲詳細 %%%

#include #include #include #include #include using namespace std;

const int maxn = 5010;

const int maxn_int = (1 << 29);

struct edge;

bool isfind;

int head[maxn];

edge edge[maxn];

int dis[maxn], gap[maxn];

int n, m, ecnt, aug, maxflow;

void init()

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

void find(int s)

augc = aug;

mindis = n - 1;

for(int i = head[s]; i + 1; i = edge[i].nxt)

aug = augc;

}mindis = min(mindis, dis[edge[i].v]);}}

if(!isfind)else}

int main()

while(dis[1] < n)

cout << maxflow << endl;

}return 0;

}

const int size = 501;

const int max = 1 << 15;

int graph[size][size];

int label[size]; //標號

bool visited[size];

bool bfs(int st, int ed)}}

if (label[ed] == -1)

return true;}

int inflow[size]; //流入量

int maxflow()}}

while (plist.size()) }}

}if (inflow[p] > 0 && p != end) }}

if (!visited[p] && minlabel != -1 && minlabel < size) //minlabel < size, 這個條件需要加上, 因為經過測試發現有死迴圈的可能}}

}}

return inflow[end];

}

#include #include #include #include #include using namespace std;

const int maxn = 1010;

const int maxm = 1000100;

const int maxn_int = (1 << 29);

struct edge;

struct node;

bool vis[maxn];

node pre[maxn];

edge edge[maxn];

int n, m, ecnt, sumflow;

int head[maxn], dis[maxn];

void init()

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

bool spfa(int s, int t, int n)}}

}if(dis[t] == maxn_int) return false;

return true;}

int mcmf(int s, int t, int n)

for(int i = t; i != s; i = pre[i].v)

mincost += dis[t] * minflow;

}sumflow = flow;

return mincost;}

int main()

int ans = mcmf(1, n, n);

printf("%d\n", ans);

}return 0;

}

網路流 最小費用最大流

q 為什麼突然想搞網路流?a 迫於tham 蛤mu的淫威 用最短路演算法求出s t的路徑 把路徑要摳出來,而且每條邊要有容量 算一下路徑裡面的可以流過的最大的流量 發現此時的花費就是 dis t flow 累加即可.重複1 3直到不能夠到達t.include include include incl...

網路流 費用流 最大流最小割定理

囧,今天第一天電腦競賽補課,就把最大流的bfs增廣 先流預推法 最大流最小割定理 最小費用流講完了。汗。而我,就只記住了bfs增廣和最大流最小割定理。最小費用流ms差不多明白了。所以先講講bfs增廣求最大流的演算法吧。簡單的來說,就是從s 源 開始bfs,直到到達t 匯 or不存在增廣路。所謂增廣路...

網路流 費用流 最大流最小割定理

囧,今天第一天電腦競賽補課,就把最大流的bfs增廣 先流預推法 最大流最小割定理 最小費用流講完了。汗。而我,就只記住了bfs增廣和最大流最小割定理。最小費用流ms差不多明白了。所以先講講bfs增廣求最大流的演算法吧。簡單的來說,就是從s 源 開始bfs,直到到達t 匯 or不存在增廣路。所謂增廣路...