最大流
#include #include #include #include #include #include using namespace std;
#define clr( a , x ) memset ( a , x , sizeof (a) );
const int maxm=1005;
const int maxn=20;
const int inf = 0x3f3f3f3f;
struct dinic
edge[maxm*2];
int tol,head[maxn],dis[maxn];
void addedge(int u,int v,int w)
void init()
bool bfs(int s,int t)}}
return dis[t]!=-1;
}int dfs(int s,int t,int low)
}return 0;
}int maxflow(int s,int t)
}dc;
使用例子:
int main()
printf("case %d: %d\n",te,dc.maxflow(1,n));
}return 0;
}
費用流模板用結構體包裝後記憶體占用稍大,如果有嚴格記憶體限制的話就拆開來,基本是kuangbin的
最小費用流
求最大費用只需要取相反數,結果取相反數即可
#include #include #include #include #include #include using namespace std;
#define clr( a , x ) memset ( a , x , sizeof (a) );
const int maxn = 200006;
const int maxm = 100006;
const int inf = 0x3f3f3f3f;
struct mincostdinic edge[maxm * 2];
int head[maxn], tol;
int pre[maxn], dis[maxn];
bool vis[maxn];
void init()
void addedge(int u, int v, int cap, int cost)
bool spfa(int s, int t) }}
}return pre[t] != -1;
}//返回最大流,cost存最小費用
int mincostmaxflow(int s, int t, int &cost)
}for (int i = pre[t]; i != -1; i = pre[edge[i ^ 1].to])
flow += min;
}return flow;
}} costdc;
網路流模板
鄰接矩陣 include include include using namespace std const int inf 1 30 const int point num 300 int cap point num point num dist point num gap point num 初...
網路流模板
最大流 最小割 演算法 最小割就是刪掉權值最小的邊讓源點和匯點分別分在兩個不連通的集合 就是把圖分成兩個集合,保證源點和匯點不連通,可以解決刪掉權值最小的邊刻意讓某些點和另外點孤立,也就是堵住前面點到匯點的去路 增廣路edmondskarp演算法 n m 2 n是點數,m是有向邊數 define r...
網路流模板
dinic struct edge vector g max v int level max v int iter max v 當前弧優化 void add edge int from,int to,int cap 通過bfs計算從源點出發的距離標號 void bfs int s 通過dfs尋找增廣...