网络流 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 ...
随机推荐
- ActiveMQ学习笔记(13)----Destination高级特性(一)
1. Wildcards 1. Wildcards用来支持名字分层体系,它不是JMS规范的一部分,是ActiveMQ的扩展. ActiveMQ支持一下三种wildcards: 1. ".&q ...
- 【BZOJ4448】【SCOI2015】情报传递
这题面错别字真tm多 题意: Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有若T名(可能没有)下线,除1名大头日外其余n-1 ...
- 查看centos7启动项
[root@k8s-master ~]# chkconfig Note: This output shows SysV services only and does not include nativ ...
- linux指令--用户和工作组管理
>>前言 Linux是一个多用户.多任务的操作系统,Linux系统的初衷之一就是满足多用户同时工作的需求,因此,linux需要具备很好的安全性,需要对用户进行管理,用户又分几种,管理 ...
- spring中IOC的简单使用
spring的ioc主要就是依赖注入,有基于构造器的依赖注入还有通过设值注入,这里我只简单的实现设值注入的方法,通过spring的依赖管理,我们可以很方便的了解各层之间的依赖关系,降低了各层之间的耦合 ...
- POJ 1161 Walls(最短路+枚举)
POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...
- Qt之QDesktopServices
简述 QDesktopServices类提供的函数用于访问常见的桌面服务. 许多桌面环境都会提供一系列服务,可以通过应用程序来执行常见任务,如:以用户应用程序首选项的方式,打开一个网页. 此类包含为服 ...
- Android平台Camera实时滤镜实现方法探讨(九)--磨皮算法探讨(一)
上一篇开头提到了一些可用于磨皮的去噪算法.以下我们实现这些算法而且观察效果,咱不考虑实时性的问题 本文首先探讨的首先是<基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用> 该 ...
- IOS开发的哪些异常之异常断点
从Android开发的异常报错到IOS的异常闪退,经历了不一样的处理过程.对于IOS的异常报错刚開始总是非常茫然,永远仅仅告诉你有异常.然后就跳到main.m文件,却不曾我告诉她在那出现.真是吊人胃口 ...
- sass05 数据类型,数据运算
/*! 数字类型 */ $n1: 1.2; $n2: 12; $n3: 14px; p{ font-size: $n3; } /*! 字符串类型*/ $s1: container; $s2: 'con ...