网络流 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的更多相关文章

  1. HDU 3549 Flow Problem(最大流)

    HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  2. hdu 3549 Flow Problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...

  3. hdu 3549 Flow Problem【最大流增广路入门模板题】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...

  4. HDU 3549 Flow Problem 网络流(最大流) FF EK

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  5. hdu 3549 Flow Problem Edmonds_Karp算法求解最大流

    Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...

  6. hdu 3549 Flow Problem (网络最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  7. HDU 3549 Flow Problem (最大流ISAP)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. hdu 3549 Flow Problem (Dinic)

    Flow ProblemTime Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  9. hdu 3549 Flow Problem 最大流问题 (模板题)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

随机推荐

  1. swift学习笔记 - swift中常用关键字

    swift中常用关键字 **用作声明的关键字: ** class.deinit.enum.extension.func.import.init.let.protocol.static.struct.s ...

  2. 玩转图片上传————原生js XMLHttpRequest 结合FormData对象实现的图片上传

    var form=document.getElementById("formId"); var formData=new FormData(form); var oReq = ne ...

  3. oracle查询之null值转化

    函数coalesce(c1,c2,c3......cn);返回第一个不为null的值

  4. 转义JavaScript特殊字符

    JavaScriptUtils.javaScriptEscape("%admin' or '1=1") //转义JavaScript特殊字符

  5. mac pro配置php开发环境

    mac pro自带php和apache,所以我们只要配置下就好了 // 启动Apache服务 sudo apachectl start // 重启Apache服务 sudo apachectl res ...

  6. 紫书 例题 11-12 UVa 1515 (最大流最小割)

    这道题要分隔草和洞, 然后刘汝佳就想到了"割"(不知道他怎么想的, 反正我没想到) 然后就按照这个思路走, 网络流建模然后求最大流最小割. 分成两部分, S和草连, 洞和T连 外围 ...

  7. 第一个JavaWeb工程

    这个工程主要用来研究log4j,所以就只有一个页面,希望以后慢慢进步. java动态生成网页主要使用servlet.把请求拦截下来,处理后返回结果. 这里创建的是一个maven工程. 结构如下:

  8. python字典对象的update()方法

    使用字典对象的update()方法,如A.update(B),将B字典的键值对一次性全部添加到A字典对象,当A字典为空时,相当于深复制,非常方便.如果两个字典中存在相同的键,则进行值的更新. A={} ...

  9. js 函数基础(方便复习使用)

    // 函数声明: function bbq(){ // ..... } // 函数表达式: // 1.命名函数表达式 var test = function abc(){ document.write ...

  10. 基于LevelDB的高可用ActiveMQ集群

    基于LevelDB的高可用ActiveMQ集群 http://donald-draper.iteye.com/blog/2347913