Dinic
来源:互联网 发布:小坏源码社区 编辑:程序博客网 时间:2024/09/21 09:04
/***********************************************\ |Author: YMC |Created Time: 2014/4/15 19:42:23 |File Name: Dinic.cpp |Description: \***********************************************/#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <string>#include <cstring>#include <algorithm>#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <queue>#include <stack>#define MAX_V 1005using namespace std;#define INF 10000000struct edge{ int to,cap,rev;};vector <edge> G[MAX_V];int level[MAX_V];int iter[MAX_V];//当前弧,之前用过的已经没用了void add_edge(int from,int to,int cap){ G[from].push_back((edge){to,cap,G[to].size()}); G[to].push_back((edge){from,0,G[from].size()-1});}void bfs(int s){ memset(level,-1,sizeof(level)); queue<int> que; level[s] = 0; que.push(s); while(!que.empty()){ int v = que.front(); que.pop(); for(int i=0;i<G[v].size();++i){ edge &e = G[v][i]; if(e.cap > 0 && level[e.to]<0){ level[e.to] = level[v] + 1; que.push(e.to); } } }}int dfs(int v,int t,int f){ if(v == t) return f; for(int &i = iter[v];i edge &e = G[v][i]; if(e.cap > 0 && level[v] < level[e.to]){ int d = dfs(e.to,t,min(f,e.cap)); if(d > 0){ e.cap -= d; G[e.to][e.rev].cap += d; return d; } } } return 0; //千万注意不要漏了返回0,不然会无限循环。 }int max_flow(int s,int t){ int flow = 0; for(;;){ bfs(s); //cout<<"haha"; if(level[t] < 0) return flow; memset(iter,0,sizeof(iter)); int f; while((f = dfs(s,t,INF)) > 0){ flow += f; } } return flow;}int main() { //freopen("input.txt","r",stdin); int n; scanf("%d",&n); int from,to,cap; int s,t; while(n–){ scanf("%d%d%d",&from,&to,&cap); add_edge(from,to,cap); } scanf("%d%d",&s,&t); printf("%d\n",max_flow(s,t)); return 0;}/*74 1 101 3 61 2 63 2 34 2 22 5 53 5 84 511请按任意键继续. . .*/
0 0
- dinic
- dinic
- Dinic
- Dinic
- dinic
- Dinic
- dinic
- Dinic
- dinic
- dinic
- Dinic
- dinic
- Dinic
- Dinic 算法
- poj3469 Dinic
- poj1637 Dinic
- Dinic 模板
- NetWord Dinic
- POJ 1609 Tiling Up Blocks.
- 智能家居:智能中心还是消息总线(II)
- 祿眞 (逸話)
- 二分图除了用匈牙利算法,还可以先预处理一下数据,转化为最大流来做
- POJ 3253 Fence Repair(哈夫曼树)
- Dinic
- ZOJ-1269
- 【Android开发-3】认识认识项目文件结构和作用
- Ford_Fulkerson算法
- Android-登陆界面,包含记住密码和自动登陆
- Ubuntu中怎样像windows中那样设置默认程序
- 最小生成树两种算法。kruskal和prim
- 【多校赛第三场】Redraw Beautiful Drawings【网络流】【谜のWA】
- hdu 4909 String(计数)