#include<cstring>
#include<cstdio>
#define FOR(i,f_start,f_end) for(int i=f_startl;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
const int maxn=;
const int maxm=2e4+;
int size;
int n;
const int inf=0x3f3f3f3f;
using namespace std;
int head[maxn];
void init(){
size=;
MS(head,-);
}
struct Node{
int from,to,cap,next;
}edge[maxn];
void add(int u,int v,int w){
edge[size].from=u;
edge[size].to=v;
edge[size].cap=w;
edge[size].next=head[u];
head[u]=size++;
edge[size].from=v;
edge[size].to=u;
edge[size].cap=0;
edge[size].next=head[v];
head[v]=size++;
}
int dep[maxn];
int bfs(int start,int end){
int que[maxn];
int front,rear;
MS(dep,-);
que[rear++]=start;
dep[start]=;
while(front!=rear){
int u=que[front++];
if(front==maxn)front=;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].to;
if(edge[i].cap>&&dep[v]==-){
dep[v]=dep[u]+;
que[rear++]=v;
if(rear>=maxn)rear=;
if(v==end)return ;//优化1 找到直接返回
}
}
}
return ; }
int dinic(int start,int end){ int res=;
int top;
int stack[maxn];//非递归 手写栈
int cur[maxn];
while(bfs(start,end)){
memcpy(cur,head,sizeof(head));//当前弧预备工作
int u=start;
top=;
while(){
if(u==end){//当找到终点的时候
int min=inf;
int loc;
for(int i=;i<top;i++){//找到路径里面最小的流量
if(min>edge[stack[i]].cap){
min=edge[stack[i]].cap;
loc=i;//记下最小流量的边 之后的点都不可能到达了
}
}
for(int i=;i<top;i++){//减流量和加反向边
edge[stack[i]].cap-=min;
edge[stack[i]^].cap+=min;
}
res+=min;
top=loc;//退栈顶到那个流量已经清零的边的起点i
u=edge[stack[top]].from; }
for(int i=cur[u];i!=-;cur[u]=i=edge[i].next)//当前弧优化如果存在以下情况的时候就可以break进行操作了
if(edge[i].cap!=&&dep[u]+==dep[edge[i].to])
break;
if(cur[u]!=-){//如果有边可以走 那么就把边和点入栈
stack[top++]=cur[u];
u=edge[cur[u]].to;
}
else {//如果从栈顶点出发找不到可以增广的路径了,那么如果栈已经空了 那可能就没有可以增广的路径了,而如果栈没有空 那么就退栈继续找
if(top==)break;
dep[u]=-;//因为从u已经找不到可以走的路径了 直接把dep[u]=-1相当于没有点可以可以通过dep[u]+1==dep[edge[i].to]的条件 也就是u以后也入不了栈了
u=edge[stack[--top]].from;
}
}
}
return res;
}
int main(){
int start,end;
int np,nc,m;
int u,v,z;
while(scanf("%d%d%d%d",&n,&np,&nc,&m)==){
init();
while(m--){
while(getchar()!='(');
scanf("%d,%d)%d",&u,&v,&z);
u++,v++;
add(u,v,z); }
while(np--){
while(getchar()!='(');
scanf("%d)%d",&u,&z);
u++;
add(,u,z);
}
while(nc--){
while(getchar()!='(');
scanf("%d)%d",&u,&v);
u++;
add(u,n+,z);
}
start=;
end=n+;
int ans=dinic(start,end);
printf("%d\n",ans);
}
return ;
}

Power Network POJ - 1459 网络流 DInic 模板的更多相关文章

  1. Power Network (poj 1459 网络流)

    Language: Default Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 23407   ...

  2. Power Network POJ - 1459 [网络流模板]

    http://poj.org/problem?id=1459 嗯,网络流模板...多源点多汇点的图,超级汇点连发电厂,用户连接超级汇点 Status Accepted Time 391ms Memor ...

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

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

  4. Power Network - poj 1459 (最大流 Edmonds-Karp算法)

      Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 24788   Accepted: 12922 Description A ...

  5. F - Power Network - poj 1459(简单最大流)

    题目大意:题目说了一大堆,其实都是废话......让人有些不知所云,其实就是给了一些电厂,和一些消费点,然后里面有一些路线什么的,求出消费点可以最多消费的电量是多少. 输入大意: 分析:懂了题意就是一 ...

  6. F - Power Network POJ - 1459

    题目链接:https://vjudge.net/contest/299467#problem/F 这个是一个很简单的题目,但是读入很有意思,通过这个题目,我学会了一种新的读入方式. 一个旧的是(%d, ...

  7. POJ 1273 Drainage Ditches (网络流Dinic模板)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  8. poj 1459(网络流)

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 26688   Accepted: 13874 D ...

  9. poj 1459 网络流问题`EK

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 24930   Accepted: 12986 D ...

随机推荐

  1. 【Java并发.5】基础构建模块

    本章会介绍一些最有用的并发构建模块,有丶东西(最后一小节,纯干货). 5.1 同步容器类 同步容器类包括 Vector 和 Hashtable ,这些类实现线程安全的方式是:将它们的状态封装起来,并对 ...

  2. 苹果 icloud 把我 ipad min 所有照片丢失

    苹果 icloud 把我 ipad min 所有照片丢失,大概发生在 '云上贵州' 之后! 发帖纪念--- 求个说法---

  3. 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)

    十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器 ...

  4. Spring集成Quarz开发环境搭建

    第一步,搭建Spring相关的环境,参照:http://www.cnblogs.com/dyh004/p/4645572.html 第二步,下载Quartz相关的压缩文件,解压,下载地址:http:/ ...

  5. D. Nastya Is Buying Lunch

    链接 [https://codeforces.com/contest/1136/problem/D] 题意 有N个人,a[i]表示第i个人的编号,m个二元组. 当前一个在后一个的前面一个位置时二者可以 ...

  6. mysql处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY ...

  7. 容器化-Docker实战

    导读:本文系统性介绍Docker安装.Docker组件.Docker命令.Dockerfile语法和Docker应用,通过上述介绍使我们已经对docker基本操作有一定了解. 一.前言 本文将系统性的 ...

  8. hana-banach定理

    1.  x1不是X除开G以外所有的空间 2.如果极大元不是全空间的话,根据前面的讨论,还可以延拓,这就和极大矛盾了

  9. php-fpm-运行原理(转)

    转载自https://studygolang.com/articles/15073 php-fpm是一种master(主)/worker(子)多进程架构,与nginx设计风格有点类似.master进程 ...

  10. Mixing x86 with x64 code (混合编写x86和x64代码)

    几个月前我小小的研究了在WOW64下的32位进程中运行native x64代码. 第二个设想是在64位进程下运行x86代码.它们都是可以的,如我google的一样, 已经有人在使用这两种方法了: ht ...