【模板】最大流模板(dinic)
题目描述
如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。
输入输出格式
输入格式:
第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。
接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)
输出格式:
一行,包含一个正整数,即为该网络的最大流。
输入输出样例
输入样例#1:
4 5 4 3
4 2 30
4 3 20
2 3 20
2 1 30
1 3 40
输出样例#1:
50
说明
时空限制:1000ms,128M
数据规模:
对于30%的数据:N<=10,M<=25
对于70%的数据:N<=200,M<=1000
对于100%的数据:N<=10000,M<=100000
一堆注释掉的中间输出见证了脑残错误的代价QAQ。。。
code:
//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int rd() {
int x=0,fla=1;
char c=' ';
while(c>'9'|| c<'0') {if(c=='-') fla=-fla; c=getchar();}
while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
// scanf("%d",&x);
return x*fla;
}
const int MAX=10010;
const int INF=1e9;
int n,m,s,t,cnt;
int maxflow;
int head[MAX],deep[MAX],cur[MAX];
struct edges{
int to,next,w;
};
edges edge[200010];
void add(int x,int y,int z) {
edge[++cnt].next=head[x];
edge[cnt].to=y;
edge[cnt].w=z;
head[x]=cnt;
// cout<<cnt<<" "<<edge[cnt].to<<" "<<edge[cnt].next<<" "<<edge[cnt].w<<endl;
}
queue <int> q;
bool bfs() {
memset(deep,0,sizeof deep);
deep[s]=1;
for(int i=1;i<=n;i++) cur[i]=head[i];//!!!
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty()) {
int u=q.front(),v; q.pop();
for(int i=head[u];i!=-1;i=edge[i].next)
if(!deep[v=edge[i].to] && edge[i].w) {
deep[v]=deep[u]+1;
q.push(v);
}
}
// cout<<deep[t]<<endl;
// for(int i=1;i<=n;i++) cout<<deep[i]<<" ";
// cout<<endl;
return deep[t];
}
int dfs(int now,int flow) {
if(now==t) return flow;
for(int& i=cur[now];i!=-1;i=edge[i].next) {
int v=edge[i].to,di;
// if(v==t) cout<<edge[i].w<<endl;
if(deep[now]+1==deep[v] && edge[i].w
&& (di=dfs(v,min(flow,edge[i].w))) ) {
// if(v==t) cout<<edge[i].w<<endl;
edge[i].w-=di;
edge[i^1].w+=di;
return di;
}
}
return 0;
}
void dinic() {
while(bfs())
while(int di=dfs(s,INF))
maxflow+=di;
}
int main() {
n=rd(),m=rd(),s=rd(),t=rd();
cnt=-1;
memset(head,-1,sizeof head);
for(int i=1;i<=m;i++) {
int a=rd(),b=rd(),c=rd();
add(a,b,c);
add(b,a,0);
}
dinic();
printf("%lld",maxflow);
return 0;
}
【模板】最大流模板(dinic)的更多相关文章
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 【Luogu】P3376网络最大流模板(Dinic)
最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了 ...
- ZOJ_2314_Reactor Cooling_有上下界可行流模板
ZOJ_2314_Reactor Cooling_有上下界可行流模板 The terrorist group leaded by a well known international terroris ...
- Drainage Ditches---hdu1532(最大流, 模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 最大流模板题: EK:(复杂度为n*m*m); #include<stdio.h> ...
- Flow Problem(最大流模板)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- HDU3376 最小费用最大流 模板2
Matrix Again Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)To ...
- HDU2686 费用流 模板
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu4292 Food 最大流模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4292 题意:水和饮料,建图跑最大流模板. 我用的是学长的模板,最然我还没有仔细理解,不过这都不重要直接 ...
- HDU-3549Flow Problem 最大流模板题
传送门 这里是Ford-Fulkerson写的最大流模板 #include <iostream> #include <cstdio> #include <algorith ...
随机推荐
- 框架统一出参数DTO格式
这个可以没必要定义. 每个接口返回自己的数据格式就好
- requireJS文件夹
前言 对于像我这样的requireJS刚開始学习的人而言,requireJS最难理解的部分应该是它的路径问题.晚上随便折腾了一下,算是略微理清了这个文件夹问题吧. requireJS学习网址:requ ...
- JAVA小程序:和电脑猜拳
import java.util.Scanner; import java.util.Random; public class Hello { public static int judge ...
- spring 源码解析
1. [文件] spring源码.txt ~ 15B 下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB 下载( ...
- java 线程死锁的检测
java 线程死锁的检测 例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...
- Vue环境搭建+VSCode+Win10
一.安装Node.js(js的运行环境) 1.在Node.js官网https://nodejs.org/en/download/下载安装包.2.下载后进行安装.3.打开命令行,输入node -v可以查 ...
- 修改linux内核开机logo并居中全屏显示【转】
本文转载自:http://blog.csdn.net/xuezhimeng2010/article/details/49299781 1.准备图片 使用ubuntu自带的绘图软件GIMP是最为快捷的 ...
- python 读取二进制文件 转为16进制输出
示例: #!/usr/bin/env python #encoding: utf-8 import binascii fh = open(r'C:\Temp\img\2012517165556.png ...
- 【BZOJ 2351】 Matrix
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2351 [算法] 哈希 [代码] #include<bits/stdc++.h& ...
- hammer教程
一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...