题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549

Flow Problem

Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 5111    Accepted Submission(s): 2385

Problem Description
Network flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.
 
Input
The first line of input contains an integer T, denoting the number of test cases.

For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)

Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)
 
Output
For each test cases, you should output the maximum flow from source 1 to sink N.
 
Sample Input
2
3 2
1 2 1
2 3 1
3 3
1 2 1
2 3 1
1 3 1
 
Sample Output
Case 1: 1
Case 2: 2
 
Author
HyperHexagon
 
Source
 
Recommend
zhengfeng
 

题意:给你 n 个点【1 ... n】, m 条边 ( 2 <= N <= 15, 0 <= M <= 1000)

给出 m 条边的起点 x ,终点 y, 容量 c ( 1 <= C <= 1000)

求从第一个点到第 n 个点的最大容量。 直接套模板即可Orz

算法:最大流增广路模板题。

注意:因为可能会出现两个点有多条边的情况,所以输入时记录容量时需要全部加起来。

最大流算法介绍:

lrj 《算法竞赛入门经典》总结:http://blog.csdn.net/cfreezhan/article/details/9366053

Accepted 3549 46MS 248K 1984 B C++ free斩
#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
using namespace std; const int maxn = 20;
const int INF = 1000000+10; int cap[maxn][maxn]; //流量
int flow[maxn][maxn]; //容量
int a[maxn]; //a[i]:从起点 s 到 i 的最小容量
int p[maxn]; //p[i]: 记录点 i 的父亲 int main()
{
int T;
int n,m;
scanf("%d", &T);
for(int test = 1; test <= T; test++)
{
scanf("%d%d", &n,&m);
memset(cap, 0, sizeof(cap)); //初始化容量为 0
memset(flow, 0, sizeof(flow)); // 初始化流量为 0 int x,y,c;
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d", &x,&y,&c);
cap[x][y] += c; // 因为可能会出现两个点有多条边的情况,所以需要全部加起来
}
int s = 1, t = n; // 第一个点为起点, 第 n 个点为终点 queue<int> q;
int f = 0; // 总流量 for( ; ; ) // BFS找增广路
{
memset(a,0,sizeof(a)); //每次找增广路初始化最小残量为 0 ,所以 a[i] 同时可做标记数组
a[s] = INF; // 起点残量无限大
q.push(s); // 起点入队 while(!q.empty()) // 当队列非空
{
int u = q.front(); q.pop(); // 取出队首并弹出
for(int v = 1; v <= n; v++) if(!a[v] && cap[u][v] > flow[u][v]) //找到新节点 v
{
p[v] = u; q.push(v); // 记录 v 的父亲,并加入 FIFO 队列
a[v] = min(a[u], cap[u][v]-flow[u][v]); // s-v 路径上的最小残量【从而保证了最后,每条路都满足a[t]】
}
} if(a[t] == 0) break; // 找不到, 则当前流已经是最大流, 跳出循环 for(int u = t; u != s; u = p[u]) // 从汇点往回走
{
flow[p[u]][u] += a[t]; //更新正向流
flow[u][p[u]] -= a[t]; //更新反向流
}
f += a[t]; // 更新从 s 流出的总流量 }
printf("Case %d: %d\n", test, f); }
return 0;
}

hdu 3549 Flow Problem【最大流增广路入门模板题】的更多相关文章

  1. Power Network (最大流增广路算法模板题)

    Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20754   Accepted: 10872 Description A p ...

  2. hdu - 3549 Flow Problem (最大流模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 Ford-Fulkerson算法. #include <iostream> #include ...

  3. hdu 3549 Flow Problem (最大流)

    裸最大流,做模板用 m条边,n个点,求最大流 #include <iostream> #include <cstdio> #include <cstring> #i ...

  4. hdu 3549 Flow Problem 最大流 Dinic

    题目链接 题意 裸的最大流. 学习参考 http://www.cnblogs.com/SYCstudio/p/7260613.html Code #include <bits/stdc++.h& ...

  5. HDU 3549 Flow Problem(最大流)

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

  6. 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...

  7. hdu 3549 Flow Problem(增广路算法)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 模板题,白书上的代码... #include <iostream> #include & ...

  8. HDU 3549 Flow Problem(最大流模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 刚接触网络流,感觉有点难啊,只好先拿几道基础的模板题来练练手. 最大流的模板题. #include< ...

  9. 题解报告:hdu 3549 Flow Problem(最大流入门)

    Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, your t ...

随机推荐

  1. 获得Oracle当前日期的年或月的第一天和最后一天

    .当前日期的年份第一天和最后一天 第一天 select trunc(sysdate,'y') FROM DUAL; select trunc(sysdate,'yy') FROM DUAL; sele ...

  2. iframe.contentWindow 属性:关于contentWindow和contentDocument区分

    定义和用法 contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档,可以通过所有标准的 DOM 方法来处理被返回的对象. 语法:frameObject.content ...

  3. account for 与led to和result in的区别

    account for sth:be the explanation of sth; explain the cause of sth 作某事物的解释; 解释某事物的原因:His illness ac ...

  4. curl 执行post请求

    #curl -l -H "Content-type: application/json;charset=UTF-8" -H "X-Forwarded-For: 20.20 ...

  5. 安装ansj分词器

    项目地址:https://github.com/4onni/elasticsearch-analysis-ansj https://github.com/laigood/elasticsearch-a ...

  6. Android Fragment 真正的完全解析

    出处: 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragmen ...

  7. perl学习笔记一

    标量数据 标量:数字.字符.可以存储在标量变量中也可以从文件和设备中读取. 数字:所有数字内部格式相同——双精度浮点数. 浮点数直接量:程序员在程序中直接键入的数字. 整数直接量:6129804028 ...

  8. 100多道经典的JAVA面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  9. 小结:VB.NET机房收费系统个人版

    经过几天的缝缝补补,自己的个人版最终OK了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...

  10. 运用JS导出ecxel表格、实现文件重命名

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...