网络流 HDU 3549 Flow Problem
题目: pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549
用增广路算法进行求解。注意的问题有两个:
1. 每次增广的时候,反向流量也要进行更行。一開始没注意,WA了几次 ORZ
2. 对于输入的数据,容量要进行累加更新。
// 邻接矩阵存储 #include <bits/stdc++.h> using namespace std; const int INF = 0x7fffffff;
const int M = 15+5;
int c[M][M]; // capacity
int f[M][M]; // flow
int flow[M]; // current flows
int p[M]; // path // 增广路算法
long long MaxFlow(int n)
{
long long cnt = 0;
while(true)
{
queue<int> q;
q.push(1);
memset(flow, 0, sizeof(flow));
flow[1] = INF; while(!q.empty())
{
int u = q.front();
q.pop(); for(int v=1; v<=n; ++v)
{
if ( u != v && c[u][v] > f[u][v] && !flow[v] /*避免回环*/ )
{
q.push(v);
flow[v] = min(flow[u], c[u][v]-f[u][v]);
p[v] = u;
}
}
} if (flow[n]==0)
break; // 无增广了, 退出 // 进行增广
//cout<<flow[n]<<endl;
for(int v=n; v != 1; v=p[v])
{
f[p[v]][v] += flow[n];
f[v][p[v]] -= flow[n]; // 反向更新, 有流入。流出自然也应该添加! WA 了几次才发现 orz
} cnt += flow[n];
} return cnt;
} int main(void)
{
//freopen("in.txt", "r", stdin); int iCase =1;
int t = 0;
cin>>t;
while(t--)
{
memset(c, 0, sizeof(c));
memset(f, 0, sizeof(f)); int n, m;
scanf("%d%d", &n, &m); for(int i=0; i<m; ++i)
{
int s,e,v;
scanf("%d%d%d", &s, &e, &v);
c[s][e] += v; // 流入的容量要进行累加
} // 特例直接推断
if (n <= 1 || m < 1)
{
printf("Case %d: 0\n", iCase++);
continue;
} long long cnt = MaxFlow(n);
printf("Case %d: %lld\n", iCase++, cnt); } return 0;
}
网络流 HDU 3549 Flow Problem的更多相关文章
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 3549 Flow Problem
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...
- hdu 3549 Flow Problem【最大流增广路入门模板题】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...
- HDU 3549 Flow Problem 网络流(最大流) FF EK
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 3549 Flow Problem Edmonds_Karp算法求解最大流
Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...
- hdu 3549 Flow Problem (网络最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- HDU 3549 Flow Problem (最大流ISAP)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- hdu 3549 Flow Problem (Dinic)
Flow ProblemTime Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- hdu 3549 Flow Problem 最大流问题 (模板题)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
随机推荐
- 找出在使用临时表空间的SQL
SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text FROM v$session a, ...
- js表格隔行换色和hover效果
<!--js效果--> <script src="js/jquery.min.js" language="javascript">< ...
- 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)
前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章: 手把手教你如何新建scrapy爬虫框架的第一个项目(上) 手把手教你如何新建s ...
- select选中值,传this
<select onChange = "a(this)"></select> function a(obj){ $(obj).find("opti ...
- perl脚本去除文件中重复数据
今天第一天写博客,写的不好请大家多多指教,废话不多说了,干货送上: ############################################################# #!/u ...
- CF666E Forensic Examination(后缀自动机+线段树合并)
给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数. 如有多解输出最靠前的那一个. 我们首先对m个字符串 ...
- luogu P1869 愚蠢的组合数(质因数+瞎搞)
题意 n<=105 题解 一个数是不是偶数就是看有没有二这个质因子. 所以我们先预处理每个数的阶乘的二这个质因子的数量 然后按公式判断就行了. #include<iostream> ...
- CloudStack云基础架构的一些概念
1. Zones(区域) 一个区域在CloudStack配置中是最大的组织单元.一个区域通常代表一个单独的数据中心,虽然在一个数据中心也允许有多个区域.将基础架构设施加入到区域中的好处是提供物理隔离和 ...
- Myeclipse学习总结(8)——Eclipse实用操作
工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个"器".本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行 ...
- MySql5.7免安装版配置过程(ubuntu16.04)
MySql5.7免安装版配置过程(ubuntu16.04) 原创 2017年02月07日 16:58:24 标签: 1001 编辑 删除 一.安装环境: 操作系统:ubuntu16.04 数据库:my ...