博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷——P3376 【模板】网络最大流
阅读量:6910 次
发布时间:2019-06-27

本文共 1916 字,大约阅读时间需要 6 分钟。

题目描述

如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。

输入输出格式

输入格式:

 

第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)

 

输出格式:

 

一行,包含一个正整数,即为该网络的最大流。

 

输入输出样例

输入样例#1: 
4 5 4 34 2 304 3 202 3 202 1 301 3 40
输出样例#1: 
50

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=10,M<=25

对于70%的数据:N<=200,M<=1000

对于100%的数据:N<=10000,M<=100000

样例说明:

题目中存在3条路径:

4-->2-->3,该路线可通过20的流量

4-->3,可通过20的流量

4-->2-->1-->3,可通过10的流量(边4-->2之前已经耗费了20的流量)

故流量总计20+20+10=50。输出50。

 

网络流模板

#include
#include
#include
#include
#include
#define N 1000010using namespace std;queue
q;int n,m,x,y,z,tot=1,ans,s,e;int to[N],cnt[N],cap[N],lev[N],head[N],nextt[N];inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int add(int x,int y,int z){ to[++tot]=y,cap[tot]=z,nextt[tot]=head[x],head[x]=tot; to[++tot]=x,cap[tot]=0,nextt[tot]=head[y],head[y]=tot;}bool bfs(){ while(!q.empty()) q.pop(); for(int i=0;i<=n;i++) { lev[i]=-1; cnt[i]=head[i]; } q.push(s),lev[s]=0; while(!q.empty()) { int x=q.front();q.pop(); for(int i=head[x];i;i=nextt[i]) { int t=to[i]; if(cap[i]>0&&lev[t]==-1) { lev[t]=lev[x]+1; q.push(t); if(t==e) return true; } } } return false;}int dinic(int x,int flow){ if(x==e) return flow; int rest=0,delta; for(int &i=cnt[x];i;i=nextt[i]) { int t=to[i]; if(cap[i]>0&&lev[t]==lev[x]+1) { delta=dinic(t,min(cap[i],flow-rest)); if(delta) { rest+=delta; cap[i]-=delta; cap[i^1]+=delta; if(rest==flow) break; } } } if(rest!=flow) lev[x]=-1; return rest;}int main(){ n=read(),m=read(),s=read(),e=read(); for(int i=1;i<=m;i++) { x=read(),y=read(),z=read(); add(x,y,z); } while(bfs()) ans+=dinic(s,e); printf("%d",ans); return 0;}

 

转载于:https://www.cnblogs.com/z360/p/8215482.html

你可能感兴趣的文章
vue.js 入门
查看>>
Ansible系列(三):YAML语法和playbook写法
查看>>
JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理...
查看>>
Python 面向对象
查看>>
JAXB xml与javaBean的转换
查看>>
ResultSet 的Type属性 TYPE_FORWARD_ONLY, TYPE_SCROLL_I
查看>>
C#多线程--线程池(ThreadPool)
查看>>
Android FileProvider相关 Failed to find configured root that contains
查看>>
【Win 10 应用开发】UI Composition 札记(七):基于表达式的动画
查看>>
2.lombok系列2:lombok注解详解
查看>>
redis——学习之路五(简单的C#使用redis)
查看>>
Log4j中为什么设计isDebugEnabled()方法
查看>>
工作文件夹分类
查看>>
CAN协议,系统结构和帧结构
查看>>
Linux查看文件总的数据行数,并按行拆分
查看>>
ReactNative WebView组件详解
查看>>
武汉大学数学专业考研试题参考解答
查看>>
【jquery的setTimeOut定时器使用】
查看>>
HTML5 Video P2P技术研究(转)
查看>>
CAS 单点登录【2】自定义用户验证
查看>>