博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1532-Drainage Ditches
阅读量:6709 次
发布时间:2019-06-25

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

链接:https://vjudge.net/problem/HDU-1532

题意:

n条边,m个节点。

求最大流。

多组输入。

思路:

增广路算法。

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int MAXN = 200 + 10;const int INF = 1e9 + 10;struct Edge{ int _from, _to, _cap, _flow; Edge(int f, int t, int c, int l):_from(f), _to(t), _cap(c), _flow(l) {};};vector
G[MAXN];vector
edges;int a[MAXN], p[MAXN];int n, m;int Get_Flow(){ LL flow = 0; while (1) { memset(a, 0, sizeof(a)); queue
que; que.push(1); a[1] = INF; while (!que.empty()) { int x = que.front(); que.pop(); for (int i = 0;i < G[x].size();i++) { Edge & e = edges[G[x][i]]; if (!a[e._to] && e._cap > e._flow) { p[e._to] = G[x][i]; a[e._to] = min(a[x], e._cap - e._flow); que.push(e._to); } } if (a[m]) break; } if (a[m] == 0) break; for (int u = m;u != 1;u = edges[p[u]]._from) { edges[p[u]]._flow += a[m]; edges[p[u] ^ 1]._flow -= a[m]; } flow += a[m]; } return flow;}void Init(){ edges.clear(); for (int i = 1;i <= m;i++) G[i].clear();}int main(){ int l, r, c; while(~scanf("%d%d", &n, &m)) { Init(); for (int i = 1; i <= n; i++) { scanf("%d%d%d", &l, &r, &c); edges.emplace_back(l, r, c, 0); edges.emplace_back(r, l, 0, 0); int sum = edges.size(); G[l].push_back(sum - 2); G[r].push_back(sum - 1); } printf("%d\n", Get_Flow()); } return 0;}

  

转载于:https://www.cnblogs.com/YDDDD/p/10545003.html

你可能感兴趣的文章
maven目录结构
查看>>
Kali Linux 1.0
查看>>
933. Number of Recent Calls
查看>>
VMware虚拟机安装Mac OS X 10.12
查看>>
面试题集合
查看>>
TCP和UDP的最完整的区别
查看>>
UVA 1617 Laptop
查看>>
猜数字
查看>>
文件上传 - CommonsMultipartFile
查看>>
OJ 1101 谁是中间的那个
查看>>
iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
查看>>
公共代码参考(DisplayMetrics)
查看>>
[ZJOI2009]函数 BZOJ1432
查看>>
在用网站ICP备案主体变更导致网站无法访问问题解决
查看>>
js闭包实例汇总
查看>>
“Asp.Net微型服务器”根据博友们的要求改版了,也出.NET4.0版本了,要更新的博友们赶快下吧...
查看>>
一起谈.NET技术,系统架构技能之设计模式—代理模式
查看>>
搭建zookeeper单机版以及简单命令的使用
查看>>
来自docker的嚎叫
查看>>
概率密度
查看>>