网络流之最大流Dinic --- poj 1459
Description

Input
Output
Sample Input
- 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20
- 7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7
- (3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5
- (0)5 (1)2 (3)2 (4)1 (5)4
Sample Output
- 15
- 6
- #include <iostream>
- #include <algorithm>
- #include <cstring>
- #include <cstdio>
- #include <cstdlib>
- #include <queue>
- using namespace std;
- const int N = ;
- const int MAXN = 1e9 + ;
- struct Edge {
- int to;
- int value;
- int next;
- }e[*N*N];
- int head[N], cnt;
- int deep[N];
- int n, np, nc, m;
- void insert(int u, int v, int value) {
- e[++cnt].to = v;
- e[cnt].value = value;
- e[cnt].next = head[u];
- head[u] = cnt;
- }
- void init() {
- memset(head, -, sizeof(head));
- cnt = -;
- }
- bool BFS() {
- memset(deep,-,sizeof(deep));
- queue<int> Q;
- deep[] = ;
- Q.push();
- while (!Q.empty()) {
- int u = Q.front();
- Q.pop();
- for (int edge = head[u]; edge != -; edge = e[edge].next) {
- int v = e[edge].to;
- if (deep[v] == - && e[edge].value > ) {
- deep[v] = deep[u] + ;
- Q.push(v);
- }
- }
- }
- if (deep[n + ] == -) return false;
- return true;
- }
- int DFS(int u,int flow_pre) {
- if (u == n + ) return flow_pre;
- int flow = ;
- for (int edge = head[u]; edge != -; edge = e[edge].next) {
- int v = e[edge].to;
- if (deep[v] != deep[u]+ || e[edge].value==) continue;
- int _flow= DFS(v, min(flow_pre, e[edge].value));
- flow_pre -= _flow;
- flow += _flow;
- e[edge].value -= _flow;
- e[edge ^ ].value += _flow;
- if (flow_pre == ) break;
- }
- if (flow == ) deep[u] = -;
- return flow;
- }
- int GetMaxFlow() {
- int ans = ;
- while (BFS()) {
- ans += DFS(,MAXN);
- }
- return ans;
- }
- int main()
- {
- while (scanf("%d%d%d%d", &n, &np, &nc, &m) != EOF) {
- init();
- int u, v, z;
- for (int i = ; i < m; i++) {
- scanf(" (%d,%d)%d", &u, &v, &z);
- insert(u+, v+, z);
- insert(v+, u+, );
- }
- for (int i = ; i < np; i++) {
- scanf(" (%d)%d", &u, &z);
- insert(, u+, z);
- insert(u+, , );
- }
- for (int i = ; i < nc; i++) {
- scanf(" (%d)%d", &u, &z);
- insert(u + , n + , z);
- insert(n + , u + , );
- }
- printf("%d\n",GetMaxFlow());
- }
- }
网络流之最大流Dinic --- poj 1459的更多相关文章
- 网络流之最大流EK --- poj 1459
题目链接 本篇博客延续上篇博客(最大流Dinic算法)的内容,此次使用EK算法解决最大流问题. EK算法思想:在图中搜索一条从源点到汇点的扩展路,需要记录这条路径,将这条路径的最大可行流量 liu 增 ...
- 网络流之最大流Dinic算法模版
/* 网络流之最大流Dinic算法模版 */ #include <cstring> #include <cstdio> #include <queue> using ...
- 我爱网络流之最大流Dinic
直接上大佬博客: Dinic算法详解及实现来自小菲进修中 Dinic算法(研究总结,网络流)来自SYCstudio 模板步骤: 第一步,先bfs把图划分成分成分层图网络 第二步,dfs多次找增广路 当 ...
- 网络流(最大流-Dinic算法)
摘自https://www.cnblogs.com/SYCstudio/p/7260613.html 网络流定义 在图论中,网络流(Network flow)是指在一个每条边都有容量(Capacity ...
- [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]
题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机 ...
- POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)
POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Networ ...
- POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)
POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...
- POJ 3436 ACM Computer Factory (网络流,最大流)
POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...
- poj 1459 多源多汇点最大流
Sample Input 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 ...
随机推荐
- php安全字段和防止XSS跨站脚本攻击过滤函数
function escape($string) { global $_POST; $search = array ( '/</i', '/>/i', '/\">/i', ...
- fiddler设置https抓包
代理端口设置:127.0.0.1:8888 https抓包设置 模拟post请求: http://xxx.xxxx.com/portal/login.htm Cookie: xxxx account= ...
- Python爬虫:
python中selenium操作下拉滚动条方法汇总 UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元 ...
- <Math> 258 43
258. Add Digits class Solution { public int addDigits(int num) { if(num == 0) return 0; if(num % 9 = ...
- MySQL实战45讲学习笔记:第四十三讲
一.本节概述 我经常被问到这样一个问题:分区表有什么问题,为什么公司规范不让使用分区表呢?今天,我们就来聊聊分区表的使用行为,然后再一起回答这个问题. 二.分区表是什么? 为了说明分区表的组织形式,我 ...
- 爬虫——爬取Ajax动态加载网页
常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 ...
- redis之GeoHash
Redis 提供的 Geo 指令只有 6 个,它只是一个普通的 zset 结构. 增加geoadd 指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组127.0.0.1:6379&g ...
- Postman 调试请求Asp.Net Core3.0 WebApi几种常见的Get/Post/Put/Delete请求
这里就直接截图了,如下(很简单的操作): 1:Get几种请求 2:Post 3:Put 4:Delete 最后,虽然简单,代码还是给放一下(这里只是抛砖引玉的作用,自己可以根据自身的业务需要来做进一 ...
- ASP.NET MVC IOC 之 Autofac 系列开篇
本系列主要讲述Autofac在.NET MVC项目以及webform中的使用. autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 作为初学者,将学习到的每一步, ...
- 今日头条3面,被泄露的Java最新面试题
一.面试第 1 轮 1. linux 网络模型 2. b+树 3. 阻塞队列 4. redis 和 MongoDB 的区别.几个概念对比,还有底层实现. 5. 算法题: merge k sorted ...