Power Network (最大流增广路算法模板题)
| Time Limit: 2000MS | Memory Limit: 32768K | |
| Total Submissions: 20754 | Accepted: 10872 |
Description

An example is in figure 1. The label x/y of power station u shows that p(u)=x and pmax(u)=y. The label x/y of consumer u shows that c(u)=x and cmax(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and lmax(u,v)=y. The power consumed is Con=6. Notice that there are other possible states of the network but the value of Con cannot exceed 6.
Input
Output
Sample Input
2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20
7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7
(3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5
(0)5 (1)2 (3)2 (4)1 (5)4
Sample Output
15
6
Hint
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; const int MAX = ;
const int INF = 0x3f3f3f3f;
int n,np,nc,m,mf,s,t;
int cap[MAX][MAX],flow[MAX][MAX],a[MAX];
int pre[MAX];
char str[];
queue <int> que;
void maxflow()
{
memset(flow,,sizeof(flow));//初始化,所有的边的流量初始为0;
mf = ;//记录最大流
for(;;)
{
memset(a,,sizeof(a));//s到每个节点路径上的最小残量
a[s] = INF;
que.push(s);
//bfs找增广路
while(!que.empty())
{
int u = que.front();
que.pop();
for(int v = ; v <= n+; v++)
{
if(!a[v] && cap[u][v] > flow[u][v])//找到新的节点v
{
pre[v] = u;//记录前驱并加入队列
que.push(v);
if(a[u] < cap[u][v]-flow[u][v])
a[v] = a[u];
else a[v] = cap[u][v]-flow[u][v];//s到v路径上的最小残量
}
}
}
if(a[t] == ) break;//找不到最小残量,当前流已经是最大流;
for(int u = t; u!= s;u = pre[u])//从汇点往回走
{
flow[pre[u]][u] += a[t];//更新正向流量
flow[u][pre[u]] -= a[t];//更新反向流量
}
mf += a[t];//更新从s流出的总流量
}
} int main()
{
int u,v,z;
while(~scanf("%d %d %d %d",&n,&np,&nc,&m))
{
memset(cap,,sizeof(cap));
while(m--)
{
scanf("%s",str);
sscanf(str,"(%d,%d)%d",&u,&v,&z);
cap[u][v] = z;
} while(np--)//有多个起点
{
scanf("%s",str);
sscanf(str,"(%d)%d",&v,&z);
cap[n][v] = z;//将多个起点连接到一个新的顶点作为起点;
} while(nc--)//有多个终点
{
scanf("%s",str);
sscanf(str,"(%d)%d",&u,&z);
cap[u][n+] = z;//将多个终点连接到一个新的终点作为终点;
}
s = n;
t = n+;
maxflow();
printf("%d\n",mf);
}
return ;
}
Power Network (最大流增广路算法模板题)的更多相关文章
- hdu 3549 Flow Problem【最大流增广路入门模板题】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...
- HDU3549 Flow Problem(网络流增广路算法)
题目链接. 分析: 网络流增广路算法模板题.http://www.cnblogs.com/tanhehe/p/3234248.html AC代码: #include <iostream> ...
- 网络流初步:<最大流>——核心(增广路算法)(模板)
增广路的核心就是引入了反向边,使在进行道路探索选择的时候增加了类似于退路的东西[有一点dp的味道??] 具体操作就是:1.首先使用结构体以及数组链表next[ MAXN ]进行边信息的存储 2.[核心 ...
- hdu 3549 Flow Problem(增广路算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 模板题,白书上的代码... #include <iostream> #include & ...
- 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...
- 最大流增广路(KM算法) HDOJ 1533 Going Home
题目传送门 /* 最小费用流:KM算法是求最大流,只要w = -w就可以了,很经典的方法 */ #include <cstdio> #include <cmath> #incl ...
- 最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
题目传送门 /* KM: 相比HDOJ_1533,多了重边的处理,还有完美匹配的判定方法 */ #include <cstdio> #include <cmath> #incl ...
- 网络最大流增广路模板(EK & Dinic)
EK算法: int fir[maxn]; int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm]; int e_max; int p[maxn],q[ma ...
- 网络流——增广路算法(dinic)模板 [BeiJing2006]狼抓兔子
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...
随机推荐
- 互联网TCP/IP五层模型(一)
转载自:阮一峰 我们每天使用互联网.你是否想过,它是怎样实现的? 全世界几十亿台电脑,连接在一起,两两通信. 上海的某一块网卡送出信号,洛杉矶的还有一块网卡竟然就收到了.两者实际上根本不知道对方的物理 ...
- YYCache 源码分析(二)
本文分析YYMemoryCache实现原理: YYMemoryCache是内存缓存,所以存取速度非常快,主要用到两种数据结构的LRU淘汰算法 1.LRU Cache的容量是有限的,当Cache的空间都 ...
- MWEB+七牛 上传图片
MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到¥50,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...
- codevs 1281 Xn数列 (矩阵乘法)
/* 再来个题练练手 scanf longlong 有bug....... */ #include<cstdio> #include<iostream> #include< ...
- 【开源java游戏框架libgdx专题】-14-系统控件-Skin类
Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...
- 2015-09-22CSS:border、background、表格、超链接、overflow、firebug
1.CSS的border属性 ⑴定义和用法 border 简写属性在一个声明设置所有的边框属性. 可以按顺序设置如下属性: border-width border-style border-color ...
- iOS使用阿里云OSS对象存储 (SDK 2.1.1)
最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所 ...
- android 06
1.android原理 菜单-->MainActivity-->onCreate-->setContentView(R.layout.item)-->layout(item.x ...
- Ajax的load方法演示
load方法的参数形式为: load(url,[data],[callback]); 其中url为请求HTML页面的URL地址.[data]表示发送至服务器的key/value数据.callback表 ...
- STL容器介绍
STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器, 有set, multiset, map, mulmap, h ...