题目链接:http://poj.org/problem?id=1459

Power Network
Time Limit: 2000MS   Memory Limit: 32768K
Total Submissions: 27074   Accepted: 14066

Description

A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied with an amount s(u) >= 0 of power, may produce an amount 0 <= p(u) <= pmax(u) of power, may consume an amount 0 <= c(u) <= min(s(u),cmax(u)) of power, and may deliver an amount d(u)=s(u)+p(u)-c(u) of power. The following restrictions apply: c(u)=0 for any power station, p(u)=0 for any consumer, and p(u)=c(u)=0 for any dispatcher. There is at most one power transport line (u,v) from a node u to a node v in the net; it transports an amount 0 <= l(u,v) <= lmax(u,v) of power delivered by u to v. Let Con=Σuc(u) be the power consumed in the net. The problem is to compute the maximum value of Con. 

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

There are several data sets in the input. Each data set encodes a power network. It starts with four integers: 0 <= n <= 100 (nodes), 0 <= np <= n (power stations), 0 <= nc <= n (consumers), and 0 <= m <= n^2 (power transport lines). Follow m data triplets (u,v)z, where u and v are node identifiers (starting from 0) and 0 <= z <= 1000 is the value of lmax(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of pmax(u). The data set ends with nc doublets (u)z, where u is the identifier of a consumer and 0 <= z <= 10000 is the value of cmax(u). All input numbers are integers. Except the (u,v)z triplets and the (u)z doublets, which do not contain white spaces, white spaces can occur freely in input. Input data terminate with an end of file and are correct.

Output

For each data set from the input, the program prints on the standard output the maximum amount of power that can be consumed in the corresponding network. Each result has an integral value and is printed from the beginning of a separate line.

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

The sample input contains two data sets. The first data set encodes a network with 2 nodes, power station 0 with pmax(0)=15 and consumer 1 with cmax(1)=20, and 2 power transport lines with lmax(0,1)=20 and lmax(1,0)=10. The maximum value of Con is 15. The second data set encodes the network from figure 1.

Source

Southeastern Europe 2003
题意:给几个发电站,给几个消耗站,再给几个转发点。发电站只发电,消耗站只消耗电,转发点只是转发电,再给各个传送线的传电能力。问你消耗站能获得的最多电是多少。
分析:加一个超级源点,和一个超级汇点。
这个题之前做过。记录一下EK的思想吧。
EK:
广搜每一层节点,每次都记录增广路上的最小流量,汇点的最小流量为0时,说明没有增广路了。根据汇点的最小流量,更新流。
有一点要注意的是,搜索第一层后,记得标记,再往下一层搜,一直搜到汇点为止,但是我这里好像是没有标记,其实标记了,node[i]没有标记为0.
输入有空格。
#include <stdio.h>
#include <string.h>
#include <queue>
#include <iostream>using namespace std;#define MAX 120
#define INF 0x3f3f3f3fint n,np,nc,m;
int cap[MAX][MAX];int main()
{//freopen("input.txt","r",stdin);int from,to,value;while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF){memset(cap,0,sizeof(cap));///读取输电线的数据while(m--){scanf(" (%d,%d)%d",&from,&to,&value);cap[from][to]=value;}///读取发电站数据while(np--){scanf(" (%d)%d",&from,&value);cap[n][from]=value;}///读取消费者数据while(nc--){scanf(" (%d)%d",&from,&value);cap[from][n+1]=value;}int ans = 0;queue<int>  Q;int flow[MAX][MAX];     ///剩余网络int node[MAX];          ///最小流int pre[MAX];           ///增广路径
memset(flow,0,sizeof(flow));while(true){Q.push(n);memset(node,0,sizeof(node));node[n] = INF;int u;while(!Q.empty()){u = Q.front();Q.pop();for(int i=0; i<=n+1; i++){if(!node[i]&&cap[u][i]>flow[u][i]){Q.push(i);node[i] = min(node[u],cap[u][i]-flow[u][i]);pre[i] = u;}}}if(node[n+1]==0)break;for(u=n+1; u!=n; u=pre[u]){flow[pre[u]][u] +=node[n+1];flow[u][pre[u]] -= node[n+1];}ans+=node[n+1];}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/TreeDream/p/5752109.html

Poj(1459),最大流,EK算法相关推荐

  1. 网络流——最大流EK算法讲解

    网络流--最大流EK算法讲解 好了,这是第二篇博客了,如第一篇所述,来讲一讲刚刚理解的网络流.因为本人只会EK算法,所以先讲这个算法.(我会去补知识点的!!!) 什么是网络流??? 读者们刚接触这个知 ...

  2. 网络流最大流----EK算法

    先来介绍一些基本概念: 网络是指一个有向图G=(V,E),有两个特殊节点:源点S和汇点T.每条有向边(x,y)都有一个权值c(x,y),称为边的容量.如果(x,y)不在图中,那么就有c(x,y)=0. ...

  3. (通俗易懂小白入门)网络流最大流——EK算法

    网络流 网络流是模仿水流解决生活中类似问题的一种方法策略,来看这么一个问题,有一个自来水厂S,它要向目标T提供水量,从S出发有不确定数量和方向的水管,它可能直接到达T或者经过更多的节点的中转,目前确定 ...

  4. 网络流最大流EK算法板子

    刚刚看了个板子,自己能够理解的也不是太深,但是大体上懂什么意思了. #include<stdio.h> #include<string.h> #include<iostr ...

  5. 网络流问题以及EK算法复杂度分析

    网络流问题以及EK算法复杂度分析 一.网络流算法 通过一个例子引入网络流问题. 现有一个自来水厂要往家里通水,自来水厂用Vs表示,家用Vt表示.从自来水厂到家之间连接了很多水管,并且中途经过很多转接点 ...

  6. [Poj 1459] 网络流(一) {基本概念与算法}

    { 凸包的内容还欠整理 先来侃侃一个月以前就想写写的网络流 本文介绍网络流 网络流的算法 及其应用 这些问题没事想想还是很有意思的 } ================================ ...

  7. HDU 3549 Flow Problem(最大流模版EK算法)

    题目链接 第一道最大流,赤裸裸的模版题,刚好可以熟悉模版用.今天看了一下最大流,就看了一个EK算法,感觉有点和二分图匹配算法有点相似,对于最大流问题有点了解了,不过为什么这么做,也不是 很懂,只是把代 ...

  8. 最大流EK和Dinic算法

    最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...

  9. 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法

    [概述] FF 算法与 EK 算法是求解最大流的一般增广路方法,其时间复杂度均为 O(n*m*m) Ford-Fulkerson 算法是求解最大流的最基础的算法,其核心思想是增广路定理:网络达到最大流 ...

  10. 最大流算法之一——EK算法

    EK算法流程 EK算法的流程很简单: 随意找一个可行流作为流量网络更新的基础(一般题目没有规定可以采用流量为0的可行流) 利用bfsbfsbfs找一条从源点到汇点的可行流路径 用新找到的可行流路径更新 ...

最新文章

  1. java文件名与class关系
  2. 通过案例对SparkStreaming透彻理解-3
  3. mysql 日期时间类型 自动转型 及 运算
  4. 【LeetCode】拓扑排序
  5. python set 随机_python – Set.pop()不是随机的吗?
  6. 《商业智能BI白皮书3.0》正式发布(附下载链接)
  7. 【JAVA 第五章 】课后习题 Vector类的 初使用
  8. Chrome 下input的默认样式
  9. CentOS7-Docker 配置国内镜像源
  10. 浪潮商用房树新:云数据库时代来临,看浪潮商用机器如何以Power系列夯实云之基石...
  11. Web 性能优化:使用 CSS font-display 控制字体加载和替换
  12. Android工程重新编译问题
  13. Nginx的配置使用,启动、重启、关闭,以及路径配置
  14. 区块链 PBFT最多多少个节点
  15. qt实现简易时钟(Qpaintevent),可以当作桌面摆件
  16. mysql5.0驱动_mysql5.0驱动包
  17. 笔记:PJL的一些用法
  18. c语言实现fft原理,新手小白一看就会,FFT算法的原理详解
  19. 通用定时器产生PWM
  20. sRGB转CIEXYZ转CIELAB,以及色彩距离

热门文章

  1. 计算机试题新编实训,计算机基础与实训 练习题
  2. Eclipse更改默认字符集 设置UTF-8
  3. 一个鸡蛋”改变TA的世界——让贫困地区的孩子每天都能吃上一个鸡蛋
  4. excel 2010 group and subtotal function
  5. 黑客游戏系列--------第四关
  6. eclipse无法添加Tomcat7
  7. Java通过FTP服务器上传下载文件的方法
  8. LintCode-375.克隆二叉树
  9. You can't specify target table 'myusertable' for ......in FROM clause
  10. Vista上远程管理Hyper-V服务器