题干:

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) <= p max(u) of power, may consume an amount 0 <= c(u) <= min(s(u),c max(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) <= l max(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 c max(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and l max(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 l max(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of p max(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 c max(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.

题目大意:

简单的说下题意(按输入输出来讲,前面的描述一堆的rubbish,还用来误导人),给你n个点,其中有np个是能提供电力的点,nc个是能消费电力的点,剩下的点(n-np-nc)是中转战即不提供电力也不消费电力,点与点之间是有线路存在的,有m条线路,每条线路有最多运载限定。 
前4个数据就是有n个点,np个供电点,nc个消费点,m条线路,接来题目先给出的是m条线路的数据,(起点,终点)最多运载量,然后是np个供电点的数据(供电点)最多供电量,接着就是nc个消费点的数据(消费点)最多消费电量。 
题目要我们求出给定的图最大能消费的总电量(就是求最大流)

解题报告:

模板题。

AC代码:

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int tot;
struct Edge {int to,ne,w;
} e[100005 * 2];
int head[10005];
int st,ed;
int dis[10050],q[10005];//一共多少个点跑bfs,dis数组和q数组就开多大。
void add(int u,int v,int w) {e[++tot].to=v; e[tot].w=w; e[tot].ne=head[u]; head[u]=tot;e[++tot].to=u; e[tot].w=0; e[tot].ne=head[v]; head[v]=tot;
}
bool bfs(int st,int ed) {memset(dis,-1,sizeof(dis));int front=0,tail=0;q[tail++]=st;dis[st]=0;while(front<tail) {int cur = q[front];if(cur == ed) return 1;front++;for(int i = head[cur]; i!=-1; i = e[i].ne) {if(e[i].w&&dis[e[i].to]<0) {q[tail++]=e[i].to;dis[e[i].to]=dis[cur]+1;}}}if(dis[ed]==-1) return 0;return 1;
}
int dfs(int cur,int limit) {//limit为源点到这个点的路径上的最小边权 if(limit==0||cur==ed) return limit;int w,flow=0;for(int i = head[cur]; i!=-1; i = e[i].ne) {        if(e[i].w&&dis[e[i].to]==dis[cur]+1) {w=dfs(e[i].to,min(limit,e[i].w));e[i].w-=w;e[i^1].w+=w;flow+=w;limit-=w;if(limit==0) break;}}if(!flow) dis[cur]=-1;return flow;
}
int dinic() {int ans = 0;while(bfs(st,ed)) ans+=dfs(st,0x7fffffff);return ans;
}
inline int read() {char ch = getchar(); int x = 0, f = 1;while(ch < '0' || ch > '9') {if(ch == '-') f = -1;ch = getchar();} while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();} return x * f;
}
int main()
{int n,np,nc,m;while(~scanf("%d%d%d%d",&n,&np,&nc,&m)) {tot=1;for(int i = 0; i<=n+2; i++) head[i] = -1;st=n+1,ed=n+2; for(int u,v,w,i = 1; i<=m; i++) {u=read();v=read();w=read();add(u,v,w);}for(int u,w,i = 1; i<=np; i++) {u=read();w=read();add(st,u,w);}for(int u,w,i = 1; i<=nc; i++) {u=read();w=read();add(u,ed,w);}printf("%d\n",dinic());       }return 0;
}

【POJ - 1459】Power Network(网络流最大流,建图)相关推荐

  1. POJ - 1459 Power Network(网络流-最大流)

    题目链接:点击查看 题目大意:题意属实恶心,借用别的大佬的题意: 题目描述 一个电网包含一些结点(电站.消费者.调度站),这些结点通过电线连接.每个结点 uu 可能被供给 s(u) 的电能, s(u) ...

  2. POJ 1459 -- Power Network(最大流, 建图)

    题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...

  3. 初涉网络流 POJ 1459 Power Network

    怒搞一下午网络流,又去我一块心病. 从2F到SAP再到Dinic最终过掉了. 但是书上说Dinic的时间复杂度为v*v*e.感觉也应该超时的啊,但是过掉了,好诡异. 后两种算法都是在第一种的基础上进行 ...

  4. POJ 1459 Power Network

    题意:有n个据点,np个发电机.nc个用户,m条电线.给出发电机.用户.电线的电流限制,求最大网络电流. 这是带节点的网络流.事实上和原来没什么差别,仅仅要在前后都添加一个据点,在这里我加了0和n+1 ...

  5. 【POJ - 3281】Dining(拆点建图,网络流最大流)

    题干: Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wi ...

  6. POJ 1149 最大流建图 PIGS

    题意: 给出猪圈个数 m 和买家人数 n 然后给出m个猪圈的猪的头数.. 接下来 n 行.. 给出mm a1 a2 .. a(mm) k 例如 2 1 5 3 表示第i+1个用户 有mm(2) 个猪圈 ...

  7. POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)

    题目链接 题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图. 思路:首先还是尽量 ...

  8. POJ - 1847 Tram 最短路,思维建图

    题目链接 POJ-1847 题意 给定n节点,节点之间有道路相连,但是每个节点都有个开关,只有开关指向的节点才能通行,你可以搬动开关.给定起点终点,求最少搬动开关次数. 解法 建图,对于每个节点,初始 ...

  9. POJ-1459 Power Network 网络流

    题意:给定一些散列的源点会汇点,求解网络流. 代码如下: #include <cstdlib> #include <cstring> #include <cstdio&g ...

  10. Codeforces 362E Petya and Pipes 费用流建图

    题意: 给一个网络中某些边增加容量,增加的总和最大为K,使得最大流最大. 费用流:在某条边增加单位流量的费用. 那么就可以2个点之间建2条边,第一条给定边(u,v,x,0)这条边费用为0 同时另一条边 ...

最新文章

  1. 设计模式之工厂方法模式(Factory Method)摘录
  2. 迈吉客科技继A+轮后获母基金追投
  3. HDU2642(二维的树状数组)
  4. 机器学习中的数学意义
  5. Help View修复
  6. Azkaban的介绍、安装与使用
  7. ajaxfileupload 返回值_Ajaxfileupload 上传文件后返回response的contentType错误问题
  8. linux模拟gps,Android之GPS研究(实战篇二)
  9. 目前最值得推荐的几款黑科技APP,快来收藏吧!
  10. 四位共阳极数码管显示函数_实验四 共阴数码管静态显示
  11. K-mer特征提取one-hot编码
  12. hapi mysql项目实战路由初始化_Hapi+MySql项目实战数据库操作(四)
  13. vue 实现 tooltips的效果
  14. KO88冲销内部订单结算的操作参考
  15. java 仿百度文库源码_java开发_模仿百度文库_OpenOffice2PDF_源码下载
  16. 找不到凭据分配oracle修正,远程连接身份验证错误,又找不到加密Oracle修正
  17. 动态内存的申请和释放
  18. Android 仿淘宝商品详情页下拉足迹Demo
  19. 安装linux双系统简书,安装win10+ubuntu18.04双系统
  20. 产品经理如何了解高深莫测的大数据?

热门文章

  1. 如何处理db2中文不显示
  2. pytorch中的squeeze和unsqueeze
  3. CodeForces - 660C Hard Process
  4. win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题
  5. 单片机的单个IO口可以发送数据吗_关于51单片机各个引脚它的功能你了解多少?...
  6. 请对比html与css的异同,css3与css2的区别是什么?
  7. mySQL数据库中的备份代码_MySQL中的备份数据库
  8. 支付宝支付php代码示例,Laravel使用支付宝进行支付的示例代码
  9. html5表单密码验证及提示,HTML5表单及其验证(示例代码)
  10. 如何在WINCE中添加WebServer组件