【模板】最大流模板(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 ...
随机推荐
- Mongodb--切片
1.在3台服务器上分别运行 2717 , 27018,27109,互为副本集,形成3套replSet 2.在3台服务器上各配置config.server,运行在27020端口上,和配置mongod的命 ...
- 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA
本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL ...
- Xcode6+Cocos2d-x真机调试 报错
眼下真机调试时遇到下面问题. Undefined symbols for architecture arm64: "_png_get_io_ptr", referenced fro ...
- MEAN框架介绍
近期在Angular社区的原型开发人员间.一种全Javascript的开发架构MEAN正突然流行起来.其首字母分别代表的是:(M)ongoDB--NoSQL的文档数据库,使用JSON风格来存储数据,甚 ...
- leetCode 74.Search a 2D Matrix(搜索二维矩阵) 解题思路和方法
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- POJ 3126 Prime Path SPFA
http://poj.org/problem? id=3126 题目大意: 给你两个四位的素数s和t,要求每次改变一个数字.使得改变后的数字也为素数,求s变化到t的最少变化次数. 思路: 首先求出全部 ...
- 0x66 Tarjan算法与无向图联通性
bzoj1123: [POI2008]BLO poj3694 先e-DCC缩点,此时图就变成了树,树上每一条边都是桥.对于添加边的操作,相当于和树上一条路径构环,导致该路径上所有边都不成为桥.那么找这 ...
- Cache操作类
封装类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- 【Codeforces 258A】 Game With Sticks
[题目链接] http://codeforces.com/contest/451/problem/A [算法] 若n和m中的最小值是奇数,则先手胜,否则后手胜 [代码] #include<bit ...
- Eclipse-Error:笔记-1
ylbtech-Eclipse-Error:笔记-1 1.返回顶部 1. Whitelabel Error PageThis application has no explicit mapping f ...