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不存在增廣路。所謂增廣路...