题目链接:点击查看

题目大意:题意属实恶心,借用别的大佬的题意:


题目描述

一个电网包含一些结点(电站、消费者、调度站),这些结点通过电线连接。每个结点 uu 可能被供给 s(u) 的电能, s(u)≥0 ,同时也可能产生 p(u)的电能, 0≤p(u)≤pmax(u),站点 u 还有可能 消费 c(u) 电能, 0≤c(u)≤min(s(u),cmax(u)),可能传输 d(u)的电能, d(u)=s(u)+p(u)−c(u) 。

以上这些量存在以下限制关系:

对每个电站, c(u)=0 。对每个消费者, p(u)=0 。对每个调度站, p(u)=c(u)=0 。

在电网中两个结点 u 和 v 之间最多有一条电线连接。从结点 u 到结点 v 传输 L(u,v) 的电能, 0≤L(u,v)≤Lmax(u,v) 。定义 Con 为 c(u) 的总和,表示电网中消费电能的总和。本题的目的是求 Con 的最大值。

在图(a)中,电站结点 u 的标记” x/y ”代表 p(u)=x 、 pmax(u)=y 。消费者结点 u 的标记” x/y ”代表 c(u)=x 、 cmax(u)=y 。每条电线所对应的边 (u,v) ,其标记” x/y ” 代表 L(u,v)=x 、 Lmax(u,v)=y 。

在图(b)中,消费的最大电能 Con=6 ,图(a)列出了在此状态下各 个站点的 s(u) 、 p(u) 、 c(u) 和 d(u) 。注意,如图(b)所示的电网中,电能的流动还存在其他状态,但 消费的电能总和不超过6。

输入描述

输入文件中包含多个测试数据,每个测试数据描述了一个电网。每个测试数据的第1 行为4 个整数: n,np,nc,m ,其中, 0≤n≤100 ,代表结点数目; 0≤np≤n ,代表电站数目; 0≤nc≤n , 代表消费者数目; 0≤m≤n2 ,代表传输电线的数目。接下来有 m 个三元组, (u,v)z ,其中 u 和 v 为结点序号(结点序号从0开始计起), 0≤z≤1000 ,代表 Lmax(u,v) 的值。接下来有 npnp 个二元 组, (u)z ,其中 u 为电站结点的序号, 0≤z≤10000 ,代表 pmax(u) 的值;每个测试数据的最后是 nc 个二元组, (u)z ,其中 u 为消费者结点的序号, 0≤z≤10000 ,代表 cmax(u) 的值。所有数据都是整数。除三元组 (u,v)z 和二元组 (u)z 中不含空格外,输入文件中其他位置允许出现空格。测试数据一直到文件末尾。


题目分析:看懂题意之后,其实就是个简单的网络流求最大流的模板题,简单说一下题意就是,给出三种点:

  1. 发电站:只发电不耗电
  2. 消费者:只耗电不发电
  3. 中转站:不发电不耗电

然后个点之间由m条边连接,我们可以视为电线,每根电线都有一定的电流量,也就是最多只能通多那么多单位的电,现在给出每个发电站发的电,以及每个消费者用的电,问消费者总共最多能用多少电

其实只需要建一个超级源点指向每一个发电站,再建一个超级汇点,收集所有的消费者,对于st和ed跑一遍最大流就ok了,注意输入的时候有点恶心

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;struct Edge
{int to,w,next;
}edge[N*N];//边数int head[N],cnt;void addedge(int u,int v,int w)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].to=u;edge[cnt].w=0;//反向边边权设置为0edge[cnt].next=head[v];head[v]=cnt++;
}int d[N],now[N*N];//深度 当前弧优化bool bfs(int s,int t)//寻找增广路
{memset(d,0,sizeof(d));queue<int>q;q.push(s);now[s]=head[s];d[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(d[v])continue;if(!w)continue;d[v]=d[u]+1;now[v]=head[v];q.push(v);if(v==t)return true;}}return false;
}int dinic(int x,int t,int flow)//更新答案
{if(x==t)return flow;int rest=flow,i;for(i=now[x];i!=-1&&rest;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(w&&d[v]==d[x]+1){int k=dinic(v,t,min(rest,w));if(!k)d[v]=0;edge[i].w-=k;edge[i^1].w+=k;rest-=k;}}now[x]=i;return flow-rest;
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{int ans=0,flow;while(bfs(st,ed))while(flow=dinic(st,ed,inf))ans+=flow;return ans;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,np,nc,m;while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF){init();while(m--){int a,b,c;while(getchar()!='(');scanf("%d%*c%d%*c%d",&a,&b,&c);addedge(a,b,c);}while(np--){int a,b;while(getchar()!='(');scanf("%d%*c%d",&a,&b);addedge(n,a,b);}while(nc--){int a,b;while(getchar()!='(');scanf("%d%*c%d",&a,&b);addedge(a,n+1,b);}printf("%d\n",solve(n,n+1));}return 0;
}

POJ - 1459 Power Network(网络流-最大流)相关推荐

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

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

  2. 初涉网络流 POJ 1459 Power Network

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

  3. POJ 1459 Power Network

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

  4. POJ-1459 Power Network 网络流

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

  5. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  6. Poj(1459),最大流,EK算法

    题目链接:http://poj.org/problem?id=1459 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Su ...

  7. 【POJ - 1459】Power Network(网络流最大流,建图)

    题干: A power network consists of nodes (power stations, consumers and dispatchers) connected by power ...

  8. Power Network POJ - 1459(EK算法模板+详解)

    题意: 总共有a个节点,其中有发电站b个.用户c个和调度器a-b-c个三种节点,每个发电站有一个最大发电量,每个用户有个最大接受电量,现在有d条有向边,边有一个最大的流量代表,最多可以流出这么多电,现 ...

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

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

最新文章

  1. Agile PLM Item Title Block Tab
  2. 网页里显示访问的那台服务器,在web服务器中把网页放在那里,才能被访问
  3. 只需 4 步,自己搞个 Spring Boot Starter!
  4. 1024 程序员节:给 DBA 们的福音
  5. linux下如何添加一个用户并且让用户获得root权限
  6. 使用shell脚本将mysql数据导入HIve中
  7. C/C++心得-从内存开始
  8. 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
  9. 跟着杨中科学习asp.net之javascript
  10. 前端做登录验证码功能的理解
  11. 如何root安卓手机_2019年安卓手机一键root教程,附科普安卓为何root困难?
  12. 【英语语法入门】 第11讲 名词
  13. nginx安装部署ssl证书
  14. Intelligent Reference Curation for Visual Place Recognition via Bayesian Selective Fusion 论文阅读及注解
  15. MySQL中的表中增加删除字段
  16. MarkDown-符号大全
  17. EasyExcel 中文文档
  18. 河南省多校联盟二-F 线段树+矩阵
  19. Cryptology Unlocked
  20. Win10恢复自带应用的方法

热门文章

  1. SpringSecurity案例之把资源交给OAuth2的资源服务管理
  2. SpringBoot-@Conditional
  3. NIO和BIO如何影响应用程序的设计-数据处理
  4. Redis中的Sentinel 验证
  5. 字节流读数据(一次读一个字节数组数据)
  6. idea 自动导入包和自动将没用的包去除
  7. MyDataSourceUtils使用ThreadLocal对象
  8. 异常注意事项_子父类异常
  9. Zuul路由的strip-prefix与order
  10. Redis分布式快速入门