博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络流 dinic
阅读量:4504 次
发布时间:2019-06-08

本文共 1629 字,大约阅读时间需要 5 分钟。

1 struct Edge { 2     int v, w, f; 3     int next; 4 }edge[250*250]; 5 int head[550], tot; 6 void addedge(int u, int v, int w) { 7     edge[tot].v = v; 8     edge[tot].w = w; 9     edge[tot].f = 0;10     edge[tot].next = head[u];11     head[u] = tot++;12 }13 int lvl[505];14 bool bfs(int s, int t) {15     bool vis_t[505];16     rst(vis_t, false);17     lvl[s] = 0;18     vis_t[s] = true;19     queue
Q;20 Q.push(s);21 while(!Q.empty()) {22 int tmp = Q.front();23 Q.pop();24 if(tmp == t) return true;25 for(int i = head[tmp]; i+1; i = edge[i].next) {26 int v = edge[i].v;27 int f = edge[i].f;28 int w = edge[i].w;29 if(!vis_t[v] && f < w) {30 Q.push(v);31 vis_t[v] = true;32 lvl[v] = lvl[tmp] + 1;33 }34 }35 }36 return false;37 }38 int dfs(int now, int t, int F) {39 if(now == t) return F;40 int ret = 0, ff;41 for(int i = head[now]; i+1; i = edge[i].next) {42 int v = edge[i].v;43 int w = edge[i].w;44 int f = edge[i].f;45 if(f < w && lvl[v] == lvl[now] + 1) {46 ff = dfs(v, t, min(F-ret, w - f));47 edge[i].f += ff;48 edge[i^1].f -= ff;49 ret += ff;50 if(ret == F) return ret;51 }52 }53 return ret;54 }55 int dinic(int s, int t) {56 int ans = 0;57 while(bfs(s, t)) ans += dfs(s, t, INF);58 return ans;59 }60 void init() {61 rst(head, -1);62 tot = 0;63 }

 

转载于:https://www.cnblogs.com/mitrenick/p/4440083.html

你可能感兴趣的文章
英文外包
查看>>
ajax基础知识
查看>>
Activity与Service之间交互并播放歌曲
查看>>
在使用python3.7+channels时会出现rsync错误
查看>>
这一篇是运算符。。
查看>>
在ubuntu16.04+python3.5情况下安装nltk,以及gensim时pip3安装不成功的解决办法
查看>>
windows系统的安装时间怎么查看
查看>>
20180911-Java实例01
查看>>
Javascript Event
查看>>
解决IOS safari下滑动的“橡皮筋”效果
查看>>
asp.net 得到一个文件夹下的所有文件夹及子文件夹名,得到所有文件名,文件大小,文件夹大小...
查看>>
从keystore(jks)文件中提取私钥
查看>>
调整数组顺序使奇数位于偶数前面
查看>>
HackerRank "Training the army" - Max Flow
查看>>
jquery next()方法
查看>>
深入剖析js命名空间函数namespace
查看>>
SQLHelper
查看>>
Cocos2d-x 3.0 编译出错 解决 error: expected &#39;;&#39; at end of member declaration
查看>>
Ubuntu12.04下载Repo
查看>>
python基础教程_学习笔记10:异常
查看>>