Power Network

Time Limit: 2000MS Memory Limit: 32768K

Total Submissions: 24867 Accepted: 12958

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.

看了看最大流,在训练计划上找了一道题,敲敲,找找感觉;

  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <stdio.h>
  6. #include <string>
  7. #include <stack>
  8. #include <queue>
  9. #include <algorithm>
  10. #include <map>
  11. #define WW freopen("a1.txt","w",stdout)
  12. using namespace std;
  13. const int INF = 0x3f3f3f3f;
  14. const int MAX = 110;
  15. int resi[MAX][MAX];//残留网络
  16. int h[MAX];//高度
  17. int et[MAX];//余流
  18. int s,t;//源点与汇点
  19. int V;
  20. int n,np,nc,m;
  21. void push_relabel()//预流推进算法
  22. {
  23. int i,sum=0;
  24. int u,v,p;
  25. memset(h,0,sizeof(h));
  26. h[s]=V;//将源点初始化点的个数,使源点的的层次为最大。
  27. memset(et,0,sizeof(et));
  28. et[s]=INF;//将起始点的余流设置为无穷大;
  29. et[t]=-INF;
  30. deque<int>act;//活动定点队列
  31. act.push_front(s);
  32. while(!act.empty())
  33. {
  34. u=act.back();
  35. act.pop_back();
  36. for(i=0; i<V; i++)
  37. {
  38. v=i;
  39. p=min(resi[u][v],et[u]);//获得最小的余流
  40. if(p>0&&(u==s||h[u]==h[v]+1))
  41. {
  42. resi[u][v]-=p;
  43. resi[v][u]+=p;
  44. if(v==t)
  45. {
  46. sum+=p;
  47. }
  48. et[u]-=p;
  49. et[v]+=p;
  50. if(v!=s&&v!=t)
  51. {
  52. act.push_front(v);
  53. }
  54. }
  55. }
  56. if(u!=s&&u!=t&&et[u]>0)//如果这个点不是源点与汇点且余流不为零,则将他的层次升高;
  57. {
  58. h[u]++;
  59. act.push_front(u);
  60. }
  61. }
  62. printf("%d\n",sum);
  63. }
  64. int main()
  65. {
  66. int u,v,z;
  67. while(~scanf("%d %d %d %d",&n,&np,&nc,&m))
  68. {
  69. s=n;
  70. t=n+1;//因为没有源点与汇点所以要自己设置汇点与源点
  71. V=n+2;
  72. memset(resi,0,sizeof(resi));
  73. for(int i=0; i<m; i++)
  74. {
  75. while(getchar()!='(');
  76. scanf("%d,%d)%d",&u,&v,&z);
  77. resi[u][v]=z;
  78. }
  79. for(int i=0; i<np; i++)
  80. {
  81. while(getchar()!='(');
  82. scanf("%d)%d",&u,&z);
  83. resi[s][u]=z;//将所有的生产力放在源点
  84. }
  85. for(int i=0; i<nc; i++)
  86. {
  87. while(getchar()!='(');
  88. scanf("%d)%d",&u,&z);
  89. resi[u][t]=z;//将所有的消耗放在汇点
  90. }
  91. push_relabel();
  92. }
  93. return 0;
  94. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

Power Network 分类: POJ 2015-07-29 13:55 3人阅读 评论(0) 收藏的更多相关文章

  1. Poj 2349 Arctic Network 分类: Brush Mode 2014-07-20 09:31 93人阅读 评论(0) 收藏

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9557   Accepted: 3187 De ...

  2. 百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏

    在平常项目中,我们会遇到这样的业务场景: 客户希望把自己的门店绘制在百度地图上,通过省.市.区的选择,然后加载不同区域下的店铺位置. 先看看效果图吧: 实现思路: 第一步:整理行政区域表: 要实现通过 ...

  3. 【Heritrix基础教程之2】Heritrix基本内容介绍 分类: B1_JAVA H3_NUTCH 2014-06-01 13:02 878人阅读 评论(0) 收藏

    1.版本说明 (1)最新版本:3.3.0 (2)最新release版本:3.2.0 (3)重要历史版本:1.14.4 3.1.0及之前的版本:http://sourceforge.net/projec ...

  4. Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏

    #include<iostream> #include<cstdio> #include<algorithm> #define Max 1005 using nam ...

  5. Binary Indexed Tree 分类: ACM TYPE 2014-08-29 13:08 99人阅读 评论(0) 收藏

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; int n, ...

  6. Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏

    #include<iostream> #include<cstdio> using namespace std; struct node { int l, r, m; int ...

  7. 积分图像的应用(一):局部标准差 分类: 图像处理 Matlab 2015-06-06 13:31 137人阅读 评论(0) 收藏

    局部标准差在图像处理邻域具有广泛的应用,但是直接计算非常耗时,本文利用积分图像对局部标准差的计算进行加速. 局部标准差: 标准差定义如下(采用统计学中的定义,分母为): 其中. 为了计算图像的局部标准 ...

  8. ios UIKit动力 分类: ios技术 2015-07-14 12:55 196人阅读 评论(0) 收藏

    UIkit动力学是UIkit框架中模拟真实世界的一些特性. UIDynamicAnimator 主要有UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. 它一般有两种初始 ...

  9. Can you find it? 分类: 二分查找 2015-06-10 19:55 5人阅读 评论(0) 收藏

    Description Give you three sequences of numbers A, B, C, then we give you a number X. Now you need t ...

随机推荐

  1. GTA项目 三, 使用 bootstrap table展示界面,使得data和UI分离

    /** bootstrap-table - v1.5.0 - 2014-12-12* https://github.com/wenzhixin/bootstrap-table* Copyright ( ...

  2. 6.理解DispatcherServlet

    DispatcherServlet的作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,负责职责的分派, 且与Spring IoC容器无缝 ...

  3. linux e2fsprogs安装解决uuid/uuid.h: No such file or directory错误

    linux查看某个包是否安装    dpkg -l libuu*    用gcc编译发生nux 错误:fatal error: uuid/uuid.h: No such file or directo ...

  4. 如果类的属性是copy的NSString类型 用set方法拦截时

    @property (nonatomic, copy) NSString *badgeValue; - (void)setBadgeValue:(NSString *)badgeValue { _ba ...

  5. Effective C++ 1.让自己习惯C++

    //条款01:视C++为一个语言联邦 // 1:C++主要包含的语言为: // A:C.说到底C++仍然以C为基础.区块(blocks).语句.预处理器.内置数据类型.数组.指针等均来自于C.许多时候 ...

  6. PHP——字符串处理部分

    PHP——字符串处理 下面我们来讲一下我们经常使用的一些字符串处理的函数 1.string(变量);——取这个变量里面的字符串的长度 2.var_dump(变量a,变量b);——判断两个变量里面的字符 ...

  7. 2-sat按照最小字典序输出可行解(hdu1814)

    Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. 数据库 CRUD

    1.删除表 drop  table +表名 2.修改表 alter  table+表名+ add(添加)+列名+ int(类型) alter  table+表名+ drop(删除)+column(列) ...

  9. ajax测试异步提交

    今天测试了$.ajax()方法: $("a").click(function(){        $.ajax({           url:"MyJsp.jsp&qu ...

  10. ansible自动化运维工具的安装与使用

    运行环境 centOS6.6 ansible ansible的功能还是比较多的,博主只用它在集群上进行批量部署软件和维护的功能,其他不多做研究,有需要的话这篇文章会慢慢补充. ansible特点 轻量 ...