原题链接

题意简述

原题看了好几遍才看懂…

给出一个n(n≤100)个点,m(m≤n2)条边的有向图。n个点中有np个源点,nc个汇点,每个源点和汇点都有流出上限和流入上限。求最大流。

题解

建一个真 · 源点和一个真 · 汇点。真 · 源点向所有原源点连容量等于其上限的边,所有原汇点向真 · 汇点连容量等于其上限的边。跑一遍最大流即可。

Code

//Power Network
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline char gc()
{
static char now[1<<16],*S,*T;
if(S==T) {T=(S=now)+fread(now,1,1<<16,stdin); if(S==T) return EOF;}
return *S++;
}
bool dgt(char ch) {return '0'<=ch&&ch<='9';}
inline int read()
{
int x=0; char ch=gc();
while(ch!=EOF&&!dgt(ch)) ch=gc();
while(dgt(ch)) x=x*10+ch-'0',ch=gc();
return x;
}
int const N=1e2+10;
int n,np,nc,m; int s,t;
int cnt,h[N];
struct edge{int v,c,nxt;} ed[N*N<<1];
void edAdd(int u,int v,int c)
{
cnt++; ed[cnt].v=v,ed[cnt].c=c; ed[cnt].nxt=h[u],h[u]=cnt;
cnt++; ed[cnt].v=u,ed[cnt].c=0; ed[cnt].nxt=h[v],h[v]=cnt;
}
int dpt[N]; int q[N],op,cl;
bool bfs()
{
op=cl=0; memset(dpt,0,sizeof dpt);
dpt[q[++cl]=s]=1;
while(op<cl)
{
int u=q[++op]; if(u==t) break;
for(int i=h[u];i;i=ed[i].nxt)
{
int v=ed[i].v,c=ed[i].c;
if(dpt[v]==0 && c) dpt[q[++cl]=v]=dpt[u]+1;
}
}
return dpt[t]?true:false;
}
int fill(int u,int in)
{
if(u==t || in==0) return in;
int out=0;
for(int i=h[u];i;i=ed[i].nxt)
{
int v=ed[i].v,c=ed[i].c;
if(dpt[v]!=dpt[u]+1 || !c) continue;
int flow=fill(v,min(in-out,c));
if(!flow) dpt[v]==0;
else out+=flow,ed[i].c-=flow,ed[i^1].c+=flow;
}
return out;
}
int main()
{
while(true)
{
n=read(),np=read(),nc=read(); m=read();
if(gc()==EOF) break;
s=0,t=n+1; cnt=1; memset(h,0,sizeof h);
for(int i=1;i<=m;i++) {int u=read()+1,v=read()+1,c=read(); edAdd(u,v,c);}
for(int i=1;i<=np;i++) {int u=read()+1,p=read(); edAdd(0,u,p);}
for(int i=1;i<=nc;i++) {int u=read()+1,c=read(); edAdd(u,t,c);}
int ans=0;
while(bfs()) ans+=fill(s,0x7FFFFFFF);
printf("%d\n",ans);
}
return 0;
}

注意

输入格式比较鬼畜

原题的节点是从0开始标号的,我的源点s是0所以全体++

POJ1459 - Power Network的更多相关文章

  1. POJ1459 Power Network —— 最大流

    题目链接:https://vjudge.net/problem/POJ-1459 Power Network Time Limit: 2000MS   Memory Limit: 32768K Tot ...

  2. poj1459 Power Network (多源多汇最大流)

    Description A power network consists of nodes (power stations, consumers and dispatchers) connected ...

  3. POJ1459 Power Network(网络最大流)

                                         Power Network Time Limit: 2000MS   Memory Limit: 32768K Total S ...

  4. poj1087 A Plug for UNIX & poj1459 Power Network (最大流)

    读题比做题难系列…… poj1087 输入n,代表插座个数,接下来分别输入n个插座,字母表示.把插座看做最大流源点,连接到一个点做最大源点,流量为1. 输入m,代表电器个数,接下来分别输入m个电器,字 ...

  5. POJ1459 Power Network 网络流 最大流

    原文链接http://www.cnblogs.com/zhouzhendong/p/8326021.html 题目传送门 - POJ1459 题意概括 多组数据. 对于每一组数据,首先一个数n,表示有 ...

  6. POJ-1459 Power Network(最大流)

    https://vjudge.net/problem/POJ-1459 题解转载自:優YoU http://user.qzone.qq.com/289065406/blog/1299339754 解题 ...

  7. poj1459 Power Network --- 最大流 EK/dinic

    求从电站->调度站->消费者的最大流,给出一些边上的容量.和电站和消费者能够输入和输出的最大量. 加入一个超级源点和汇点,建边跑模板就能够了. 两个模板逗能够. #include < ...

  8. POJ1459:Power Network(dinic)

    题目链接:http://poj.org/problem?id=1459 题意:有n个结点,np个发电站,nc个消费者,m个电力运输线.接下去是m条边的信息(u,v)cost,cost表示边(u,v)的 ...

  9. [poj1459]Power Network(多源多汇最大流)

    题目大意:一个网络,一共$n$个节点,$m$条边,$np$个发电站,$nc$个用户,$n-np-nc$个调度器,每条边有一个容量,每个发电站有一个最大负载,每一个用户也有一个最大接受量.问最多能供给多 ...

随机推荐

  1. linkin大话面向对象--组合

    继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...

  2. 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放

    这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...

  3. Centos7.3下mysql5.7.18安装并修改初始密码的方法

    Centos7.3下mysql5.7.18安装并修改初始密码的方法 原文链接:http://www.jb51.net/article/116032.htm 作者:Javen205 字体:[增加 减小] ...

  4. mysql 出现Duplicate entry ‘xxx’ for key ‘PRIMARY’,一个自增字段达到了上限,

    mysql 出现Duplicate entry 'xxx' for key 'PRIMARY',一个自增字段达到了上限,

  5. python爬虫之小说爬取

    废话不多说,直接进入正题. 今天我要爬取的网站是起点中文网,内容是一部小说. 首先是引入库 from urllib.request import urlopen from bs4 import Bea ...

  6. 一行代码搭建 Python 静态服务器

    如果电脑上安装有Python, 那么进入到目标文件夹,在终端中运行如下命令, 即可搭建映射当前目录的静态文件服务器: python -m SimpleHTTPServer 9000 默认端口号是800 ...

  7. Linux面试题(1)

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来 ...

  8. JAVA List根据字段排序以及取前几条数据

    1.经常会遇到对组装的list排序或提取list中前几条数据,例如: 根据时间排序: list.sort((o1, o2) -> o2.getCreateTime().compareTo(o1. ...

  9. Opensshd 源码升级

    OPenssh 下载地址: http://www.openssh.com/ 以下步骤 OS: 6.x  安装Opensshd 7.4p1 验证通过 6.8  安装Opensshd 7.6p1 验证通过 ...

  10. python的pika模块操作rabbitmq

    上一篇博文rabbitmq的构架和原理,了解了rabbitmq的使用原理,接下来使用python的pika模块实现使用rabbitmq. 环境搭建 安装python,不会的请参考Linux安装配置py ...