题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数。
      接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z;np个数据(u)z,表示发电站的序号,以及最大的发电量;
      nc个数据(u)z,表示用电厂的序号,以及最大的用电量。
      最后让你求可以供整个网络使用的最大电力。
思路:纯模板题。
      这里主要是设一个源点s和一个汇点t,s与所有发电厂相连,边的最大容量为对应发电厂的最大发电量;
      t与所有用电厂相连,边的最大容量为对应用电厂的最大用电量。
      因为节点编号0~n-1,所以这里s设为n,t设为n+1。
      接着求最大流即可。

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue> using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=;
int pri[maxn]; //用来记录增广路
int n,np,nc,m; //n为节点数,np为发电站数,nc为用电厂数,m为边的个数。
int s,t,sum; //源点,汇点,最大流
struct Edge{
int c,f; //c为容量,f为流
}edge[maxn][maxn];
bool BFS() {
queue<int> q;
memset(pri,,sizeof(pri));
pri[s]=;
q.push(s);
while(!q.empty()) {
int temp=q.front();
q.pop();
for(int i=; i<=n+; i++) {
if(!pri[i] && edge[temp][i].c-edge[temp][i].f){
pri[i]=pri[temp]+;
if(i==t)
return true; //即如果可以流到汇点,直接return true
q.push(i);
}
}
}
return false;
} //p表示当前节点,flow表示该节点通过的流量
int dinic(int p,int flow){
if(p==t){
return flow;
}
int f=flow;
for(int i=;i<=n+;i++){
if(pri[i]==pri[p]+ && edge[p][i].c-edge[p][i].f){
int a=edge[p][i].c-edge[p][i].f; //a为该边可以增加的流量
int ff=dinic(i,min(a,flow)); //ff为路径中所有a的最小值,即为该条路中可以增加的流量
edge[p][i].f+=ff; //正向边
edge[i][p].f-=ff; //逆向边,逆向边的c为0,f为负值,这样c-f即为正向边的目前流量,即可以“退流”的量
flow-=ff;
}
}
return f-flow;
}
int main()
{
int u,v,z;
while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF){
sum=;
s=n;t=n+;
for(int i=;i<maxn;i++){
for(int j=;j<maxn;j++)
edge[i][j].c=edge[i][j].f=;
}
for(int i=;i<=m;i++){
while(getchar()!='('); //要加上这句。
scanf("%d,%d)%d",&u,&v,&z);
//printf("%d %d %d\n",u,v,z);
edge[u][v].c=z;
}
for(int i=;i<np;i++){
while(getchar()!='(');
scanf("%d)%d",&u,&z);
//printf("%d %d\n",u,z);
edge[s][u].c=z;
}
for(int i=;i<nc;i++){
while(getchar()!='(');
scanf("%d)%d",&u,&z);
//printf("%d %d\n",u,z);
edge[u][t].c=z;
}
//如能找到增广路,则sum加上增加的流量
while(BFS()){
sum+=dinic(s,INF);
}
printf("%d\n",sum);
}
return ;
}

POJ 1459 Power Network(网络最大流,dinic算法模板题)的更多相关文章

  1. poj 1459 Power Network : 最大网络流 dinic算法实现

    点击打开链接 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20903   Accepted:  ...

  2. POJ - 1459 Power Network(最大流)(模板)

    1.看了好久,囧. n个节点,np个源点,nc个汇点,m条边(对应代码中即节点u 到节点v 的最大流量为z) 求所有汇点的最大流. 2.多个源点,多个汇点的最大流. 建立一个超级源点.一个超级汇点,然 ...

  3. POJ 1459 Power Network(网络流 最大流 多起点,多汇点)

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 22987   Accepted: 12039 D ...

  4. POJ 3469.Dual Core CPU 最大流dinic算法模板

    Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 24830   Accepted: 10756 ...

  5. 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 ...

  6. poj 1459 Power Network

    题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...

  7. P3376 【模板】网络最大流dinic算法

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  8. 2018.07.06 POJ 1459 Power Network(多源多汇最大流)

    Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...

  9. 网络流--最大流--POJ 1459 Power Network

    #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #incl ...

随机推荐

  1. J2EE5(Servlet2.5)对EL表达式的支持

    JAVA EE5默认 支持EL表达式. 办法一:在每个jsp文件的最上方加入以下代码: <%@ page language="java" import="java. ...

  2. USB接口介绍

        USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分 ...

  3. KOBEV / KOBED

    check the highlighted. the number of execution. if too high, can be the requirement was all met. whi ...

  4. Request.IsLocal与Request.Url.IsLoopback的区别

    均在服务器上访问时: http://localhost:17810 Request.IsLocal => trueRequest.Url.IsLoopback => true http:/ ...

  5. <hash命令:显示、添加或清除哈希表>

    linux系统下的hash指令: 说明:linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样.第一次执行命令s ...

  6. [转]Linux 分区 swap

    如何合理设置Linux的swap分区 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://commandos.blog.51cto.c ...

  7. linq 日常关键字使用

    1.from var scoreQuery = from student in students from score in student.Scores where score > 90 se ...

  8. SSH时不需输入密码

      我这里有2台机器,一台装了Teradata数据库,ip是192.168.184.128,称它为teradata-pc:另一台装了Oracle数据库,ip地址是192.168.184.129,称它为 ...

  9. Python支持中文注释

    三处设置,使Python的Eclipse开发环境(使用PyDev)支持中文 - (a)Eclipse的Window菜单Editors设置: Eclipse工具条 -> Window -> ...

  10. YARN环境搭建 之 一:CentOS7.0系统配置

    一.我缘何选择CentOS7.0 14年7月7日17:39:42发布了CentOS 7.0.1406正式版,我曾使用过多款Linux,对于Hadoop2.X/YARN的环境配置缘何选择CentOS7. ...