模板 有源汇上下界最大流 loj116
时间:2019-11-14
本文章向大家介绍模板 有源汇上下界最大流 loj116,主要包括模板 有源汇上下界最大流 loj116使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
加从t到s的流量无穷大,然后在可行流的残留网络上跑最大流。
#include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn = 210,maxm = 20800,inf = 1000000000; int cnt = 1,ss,tt,s,t,n,m; int head[maxn],dis[maxn],d[maxn],nxt[maxm],to[maxm],flow[maxm],low[maxm]; bool inq[maxn]; void add(int a,int b,int fl) { nxt[++cnt] = head[a]; to[cnt] = b; head[a] = cnt; flow[cnt] = fl; nxt[++cnt] = head[b]; to[cnt] = a; head[b] = cnt; flow[cnt] = 0; } bool bfs() { queue <int> que; memset(inq,0,sizeof(inq)); que.push(tt); inq[tt] = 1; while (!que.empty()) { int cur = que.front(); que.pop(); for (int i = head[cur];i;i = nxt[i]) { int v = to[i]; if (!inq[v] && flow[i ^ 1]) { dis[v] = dis[cur] + 1; que.push(v); inq[v] = 1; } } } return inq[ss]; } int dfs(int cur,int lmt) { if (cur == tt) return lmt; int fl = 0; for (int i = head[cur];i && fl < lmt;i = nxt[i]) { if (dis[to[i]] + 1 == dis[cur] && flow[i]) { int tt = dfs(to[i],min(lmt - fl,flow[i])); flow[i] -= tt; flow[i ^ 1] += tt; fl += tt; } } return fl; } int maxflow() { int res = 0; while (bfs()) { int fl = 0; do { fl = dfs(ss,inf); res += fl; } while (fl); } return res; } //cnt = 1 int main() { scanf("%d%d%d%d",&n,&m,&s,&t); ss = n + 1; tt = n + 2; int tx,ty,tl,tu; for (int i = 1;i <= m;i++) { scanf("%d%d%d%d",&tx,&ty,&tl,&tu); add(tx,ty,tu - tl); d[tx] -= tl; d[ty] += tl; low[i] = tl; } add(t,s,inf); int sum = 0; for (int i = 1;i <= n;i++) if (d[i] > 0) { sum += d[i]; add(ss,i,d[i]); }else if (d[i] < 0) add(i,tt,-d[i]); if (maxflow() != sum) { printf("please go home to sleep\n"); return 0; }else { ss = s; tt = t; printf("%d\n",maxflow()); } return 0; }
原文地址:https://www.cnblogs.com/iat14/p/11858473.html
- 多图见证模拟机器人的逆天成长:论进化策略在强化学习中的应用
- Hue禁止用户下载数据问题分析
- 如何在RedHat6上使用Bind搭建DNS服务
- 如何使用Cloudera Manager升级Spark2.1版本至Spark2.2
- Cloudera Manager分发Parcel异常分析
- 如何在Hue中配置Impala的负载均衡
- 35行代码实现千万级别字典的快速去重
- PIMS三个漏洞+里程密最新版V2.3 SQL注入漏洞
- 如何在Redhat7.3安装CDH5.14
- CDSW1.3的新功能
- 如何在Hue中配置HiveServer2的负载均衡
- 如何修改CDH集群的IP地址
- 如何在Kerberos环境的CDH集群部署Livy
- 如何在Kerberos环境下使用Haproxy实现HiveServer2负载均衡
- 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 数组属性和方法
- Linux如何处理文件已删除但空间不释放的问题
- 解析linux或android添加文件系统的属性接口的方法
- linux查看软件的安装位置简单方法
- 使用 bind 设置 DNS 服务器的方法
- Linux jdk安装及环境变量配置教程(jdk-8u144-linux-x64.tar.gz)
- centos6.6 下 安装 php7 + nginx环境的方法
- 如何优雅地删除 Linux 中的垃圾文件的方法
- Ubuntu18.04 安装 Anaconda3的教程详解
- VScode Remote SSH通过远程编辑与调试代码
- Ubuntu18.04下安装配置SSH服务的方法步骤
- Openssl实现双向认证教程(附服务端客户端代码)
- centos8使用Docker部署Django项目的详细教程
- ubuntu18.04 安装qt5.12.8及环境配置的详细教程
- 安装Ubuntu20.04与安装NVIDIA驱动的教程
- Ubuntu下安装nvidia显卡驱动(安装方式简单)