POJ-1459 Power Network---最大流
题目链接:
https://cn.vjudge.net/problem/POJ-1459
题目大意:
简单的说下题意(按输入输出来讲,前面的描述一堆的rubbish,还用来误导人),给你n个点,其中有np个是能提供电力的点,nc个是能消费电力的点,剩下的点(n-np-nc)是中转战即不提供电力也不消费电力,点与点之间是有线路存在的,有m条线路,每条线路有最多运载限定。
前4个数据就是有n个点,np个供电点,nc个消费点,m条线路,接来题目先给出的是m条线路的数据,(起点,终点)最多运载量,然后是np个供电点的数据(供电点)最多供电量,接着就是nc个消费点的数据(消费点)最多消费电量。
题目要我们求出给定的图最大能消费的总电量(就是求最大流)
解题思路:
供电点有提供功能,那么供电点就可以当成源点,同样消费点有消费功能,可以当成汇点。
由于这题有多个供电点和消费点,我们可以增加两个点,一个超级源点和一个超级汇点。
把所有的供电点都当成是由超级源点提供电量的,所有的消费点都将消费电量转移到超级汇点上,这样就相当于转换成一个基本的网络流求最大流的题。
超级源点与供电点有一条边,边的值为供电点最大能提供的电量,消费点与超级汇点有一条边,边的值为消费点最大能消费的电量。
增加源点汇点这一技巧很常用。
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = + ;
struct edge
{
int u, v, c, f;
edge(int u, int v, int c, int f):u(u), v(v), c(c), f(f){}
};
vector<edge>e;
vector<int>G[maxn];
int a[maxn];//找增广路每个点的水流量
int p[maxn];//每次找增广路反向记录路径
void init(int n)
{
for(int i = ; i <= n; i++)G[i].clear();
e.clear();
}
void addedge(int u, int v, int c)
{
e.push_back(edge(u, v, c, ));
e.push_back(edge(v, u, , ));
int m = e.size();
G[u].push_back(m - );
G[v].push_back(m - );
}
int Maxflow(int s, int t)
{
int flow = ;
for(;;)//每次寻找增广路
{
memset(a, , sizeof(a));//初始化每个节点的流量均为0,源点流量为INF
a[s] = INF;
queue<int>q;
q.push(s);
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = ; i < G[u].size(); i++)
{
edge &now = e[G[u][i]];
int v = now.v;
if(!a[v] && now.c > now.f)//v点还未流经,且这条路还没流满
{
p[v] = G[u][i];//反向记录
a[v] = min(a[u], now.c - now.f);
q.push(v);
}
}
if(a[t])break;//已经到汇点
}
if(!a[t])break;//已经找不到增广路
for(int u = t; u != s; u = e[p[u]].u)
{
e[p[u]].f += a[t];
e[p[u] ^ ].f -= a[t];
}
flow += a[t];
}
return flow;
}
int main()
{
int n, np, nc, m;//分别表示点数,电站数,居民数,边数
while(cin >> n >> np >> nc >> m)
{
int s = n, t = n + ;
init(t);
int u, v, c;
for(int i = ; i < m; i++)//建边
{
while(getchar() != '(');//读取左括号
scanf("%d,%d)%d", &u, &v, &c);
addedge(u, v, c);
}
for(int i = ; i < np; i++)//对于每个电站,从源点到电站点连一条边,权值为电站发电值
{
while(getchar() != '(');
scanf("%d)%d", &v, &c);
addedge(s, v, c);
}
for(int i = ; i < nc; i++)//对于每个居民,从居民点到汇点连一条边,权值是居民用电值
{
while(getchar() != '(');
scanf("%d)%d", &u, &c);
addedge(u, t, c);
}
cout<<Maxflow(s, t)<<endl;
}
return ;
}
POJ-1459 Power Network---最大流的更多相关文章
- POJ 1459 Power Network 最大流(Edmonds_Karp算法)
题目链接: http://poj.org/problem?id=1459 因为发电站有多个,所以需要一个超级源点,消费者有多个,需要一个超级汇点,这样超级源点到发电站的权值就是发电站的容量,也就是题目 ...
- POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)
POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Networ ...
- poj 1459 Power Network
题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...
- 2018.07.06 POJ 1459 Power Network(多源多汇最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...
- POJ 1459 Power Network(网络流 最大流 多起点,多汇点)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 22987 Accepted: 12039 D ...
- 网络流--最大流--POJ 1459 Power Network
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #incl ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- poj 1459 Power Network【建立超级源点,超级汇点】
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 25514 Accepted: 13287 D ...
- POJ 1459 Power Network(网络最大流,dinic算法模板题)
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数. 接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...
- POJ - 1459 Power Network(最大流)(模板)
1.看了好久,囧. n个节点,np个源点,nc个汇点,m条边(对应代码中即节点u 到节点v 的最大流量为z) 求所有汇点的最大流. 2.多个源点,多个汇点的最大流. 建立一个超级源点.一个超级汇点,然 ...
随机推荐
- 2010辽宁省赛E(Bellman_Ford最短路,状态压缩DP【三进制】)
#include<bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;struct node{ int v,z,d, ...
- 说一说solr在tomcat,jetty上的运行和安装优缺点
本文是我从别的文章中组合而成的,结合自己实际操作进行了修改. Solr是什么 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lu ...
- 用js实现倒计时功能
源码如下: 原理很简单,看注释吧 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- 洛谷P2826 LJJ的数学课
题目背景 题目描述(本题是提高组第二题难度+) 题目描述 \(LJJ\)又要开始上数学课啦!(\(T1\),永恒不变的数学) \(LJJ\)的\(Teacher\)对上次的考试很不满意(其实是出题人对 ...
- Ubuntu下rsyslog审计用户bash操作命令、收集、写入MySQL
服务端 2台服务端:10.25.109.64.10.45.18.133 1.rsyslog最新版本安装 sudo add-apt-repository ppa:adiscon/v8-stable su ...
- ProtocBuffer安装
学习protocolhttp://www.jianshu.com/p/fa126a8535a0 mac安装protocbuff: 下边总结一下安装流程: 查看官方文档源码在 https://githu ...
- vbox 挂载共享文件时可能出现的问题以及对应的解决办法
VMBox挂载共享文件时可能出现的问题以及对应的解决办法 如果出现“未能加载虚拟光盘***.iso 到虚拟电脑的错误” : 左边一栏,右键光盘,eject,再安装
- 关于jetty的那些奇葩问题
Jetty的解压目录并不像Tomcat那样直接是在webapps下,如果你什么都不做修改的话,Ubuntu14.04下Jetty的默认解压目录是/var/cache/jetty/data/下: 比如我 ...
- js 数据类型及检测
js中基本数据类型有6种number.string.undefined.null.boolean,Symbol (ES6 新增,表示独一无二的值),还有一种数据类型为引用数据类型统称为Object对象 ...
- Zookeeper崩溃恢复过程(Leader选举)
1. 崩溃恢复 a). leader选择过程可以保证新leader是ZXID最大的节点 b). ZAB协议确保丢弃那些只在leader上被提出的事务,场景 leader发出PROPOSAL收到ACK, ...