hdu 3549 Flow Problem【最大流增广路入门模板题】
题目: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
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)
2
3 2
1 2 1
2 3 1
3 3
1 2 1
2 3 1
1 3 1
Case 1: 1
Case 2: 2
题意:给你 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【最大流增广路入门模板题】的更多相关文章
- Power Network (最大流增广路算法模板题)
Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20754 Accepted: 10872 Description A p ...
- hdu - 3549 Flow Problem (最大流模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=3549 Ford-Fulkerson算法. #include <iostream> #include ...
- hdu 3549 Flow Problem (最大流)
裸最大流,做模板用 m条边,n个点,求最大流 #include <iostream> #include <cstdio> #include <cstring> #i ...
- hdu 3549 Flow Problem 最大流 Dinic
题目链接 题意 裸的最大流. 学习参考 http://www.cnblogs.com/SYCstudio/p/7260613.html Code #include <bits/stdc++.h& ...
- 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
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- hdu 3549 Flow Problem(增广路算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 模板题,白书上的代码... #include <iostream> #include & ...
- HDU 3549 Flow Problem(最大流模板)
http://acm.hdu.edu.cn/showproblem.php?pid=3549 刚接触网络流,感觉有点难啊,只好先拿几道基础的模板题来练练手. 最大流的模板题. #include< ...
- 题解报告:hdu 3549 Flow Problem(最大流入门)
Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, your t ...
随机推荐
- ~/.bash_profile介绍
mac和linux终端一般用bash来进行解析.当bash在读完了整体环境变量的/etc/profile并借此调用其他配置文件后,接下来则是会读取用户自定义的个人配置文件.bash读取的文件总共有三种 ...
- linux的chown命令
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- 2017.9.15 postgres使用postgres_fdw实现跨库查询
postgres_fdw的使用参考来自:https://my.oschina.net/Kenyon/blog/214953 postgres跨库查询可以通过dblink或者postgres_fdw来完 ...
- notepad++ 在每一行最后加上逗号
1.全选缩进对齐 2.替换功能,入下全部替换 3.在入下替换 4.结果 完成!
- Android学习(十) SQLite 基于SQL语句的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- hdu 2871 Memory Control(线段树)
题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...
- Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding
Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding 深度学 ...
- 百度js 获取定位城市名称
首先引用百度 script <script type="text/javascript" src="http://api.map.baidu.com/api?typ ...
- centos7 重启网卡报错
systemctl restart network 时候报错: rtnetlink answers file exists 是network和NetworkManager冲突了 一般建议直接 syst ...
- svn hooks使用
最近要将某个目录做samba共享出去,而想通过svn同步文档到svn,然后通过svn hooks 同步到共享目录,实现自动化 现在svn服务器和samba server再同一台机器上: 在svn路径下 ...