dinic
时间:2019-09-08
本文章向大家介绍dinic,主要包括dinic使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
namespace flow { const int maxm = 1e5 + 5, maxn = 1e5 + 5, inf = 1e9; struct edge { int nxt, to, f; } e[maxm]; int cnt = 1, source, sink; int d[maxn], h[maxn], iter[maxn]; void link(int u, int v, int f) { e[++cnt].nxt = h[u]; h[u] = cnt; e[cnt].to = v; e[cnt].f = f; } void insert(int u, int v, int f) { link(u, v, f); link(v, u, 0); } void init() { memset(h, 0, sizeof(h)); cnt = 1; source = sink = 0; } bool bfs() { queue<int> q; memset(d, -1, sizeof(d)); d[source] = 0; q.push(source); while(!q.empty()) { int u = q.front(); q.pop(); for(int i = h[u]; i; i = e[i].nxt) if(d[e[i].to] == -1 && e[i].f) { d[e[i].to] = d[u] + 1; q.push(e[i].to); } } return ~d[sink]; } int dfs(int u, int f) { if(u == sink) return f; int ret = 0; for(int &i = iter[u]; i && f; i = e[i].nxt) if(d[e[i].to] == d[u] + 1 && e[i].f) { int x = dfs(e[i].to, min(f, e[i].f)); ret += x; f -= x; e[i].f -= x; e[i ^ 1] += x; } return ret; } int dinic() { int ret = 0; while(bfs()) { for(int i = 0; i < maxn; ++i) iter[i] = h[i]; ret += dfs(source, inf); } return ret; } }
原文地址:https://www.cnblogs.com/19992147orz/p/11488219.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Connection open error . Connection Timeout Expired. The timeout period elapsed during the post-login
- macbook-12-2015款 安装win10系统 自用 实践笔记
- OpenGL ES 之attribute
- windows server 2012 r2 搭建文件服务器 问题记录 自用 实践笔记
- OpenGL ES 之uniform和varying
- OpenGL ES 绘制纹理
- Win10+Unlocker3+VMware15.5+MacOS10.14+xcode+QT for ios+虚拟机苹果系统 自用 实践笔记
- OpenGL ES 纹理过滤模式-glTexParameteri
- Jenkins时间修改为北京时间
- OpenGL ES for Android 绘制一个点
- OpenGL ES for Android 绘制线
- Jenkins自定义主题
- OpenGL ES for Android 绘制三角形
- Centos7 安装 Tomcat8 的正确姿势 并设置开机自启 实践笔记
- ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码