题意:给出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. Android基本知识

         Android是Google公司于2007年发布的基于Linux内核的手机操作系统.应用层主要以java为编程语言,应用层分为两层,函数层(Library) 和虚拟机(Virtual).中间 ...

  2. SecureCRT远程控制ubuntu

    如果你拥有两台电脑一台是ubuntu,另一台是笔记本电脑,而你又想在远程控制你的ubuntu,那么SecureCRT就可以用了. 1:首先在你的ubuntu电脑上安装SSH服务  :apt-get i ...

  3. 百度编辑器(Ueditor)最新版(1.4.3.3)插入锚点失败原因分析及BUG修复

    用百度编辑器——Ueditor(版本1.4.3.3,2016-05-18日上线)插入锚点的时候,每次总是失败,百思不得其解.通过分析Ueditor的代码ueditor.all.js,可以看出Uedit ...

  4. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  5. node-mongo-native1.3.19连接mongo的最优方法

    最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-m ...

  6. PHP 网站保存快捷方式的实现代码

    介绍下使用PHP实现网站快捷方式的保存方法. PHP怎么实现网站保存快捷方式呢?下面是一段PHP代码,下面这段代码,可以PHP实现网站保存快捷方式,以便用户随时浏览.  <?php  /** * ...

  7. 移植Oracle procedure 到 postgresql

    1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...

  8. DB 从zl.xml中导入数据库用户名及密码等!

    package com.dy.java; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  9. VC2010 MFC文档类菜单快捷键无法加载问题

    问题1. 在菜单中项中输入&Run\tF5, 运行显示Run,而不是Run F5. 问题2.在Accelerator中绑定了快捷键,但运行程序不起作用. 以上2中问题在VC++2008和VC+ ...

  10. raiserror的用法

    描述:raiserror :是用于抛出一个错误 第一个参数:{ msg_id | msg_str | @local_variable } msg_id:表示可以是一个sys.messages表中定义的 ...