网络流--Dinic(自用,勿看)
注意:这是一篇个人学习笔记,如果有人因为某些原因点了进来并且要看一下,请一定谨慎地阅读,因为可能存在各种奇怪的错误,如果有人发现错误请指出谢谢!
https://www.luogu.org/problemnew/show/P3376
来自蓝书:
时间复杂度O(n^2*m)
所有容量均为1,可以证明时间复杂度O(min(n^(2/3),m^(1/2))*m)
除了源点和汇点之外,每个点要么只有一条入弧,且容量为1,要么只有一条出弧,且容量为1,其他弧的容量为任意整数,可以证明时间复杂度O(n^(1/2)*m)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
namespace F
{ struct E
{
int to,nxt,from,cap,flow;
}e[];
int f1[],ne=;
int S,T,n;
int d[];
bool bfs()
{
int k,u;
memset(d,,sizeof(int)*(n+));
queue<int> q;
q.push(S);d[S]=;
while(!q.empty())
{
u=q.front();q.pop();
for(k=f1[u];k;k=e[k].nxt)
if(!d[e[k].to]&&e[k].cap>e[k].flow)
{
d[e[k].to]=d[u]+;
//if(e[k].to==T) return 1;
q.push(e[k].to);
}
}
//return 0;
return d[T];
}
int cur[];
int dfs(int u,int x)
{
if(u==T||x==) return x;
int flow=,f;
for(int &k=cur[u];k;k=e[k].nxt)
if(e[k].cap>e[k].flow&&d[e[k].to]==d[u]+)
{
f=dfs(e[k].to,min(x-flow,e[k].cap-e[k].flow));
e[k].flow+=f;e[k^].flow-=f;flow+=f;
if(flow==x) return flow;
}
return flow;
}
int solve()
{
int flow=;
while(bfs())
{
memcpy(cur,f1,sizeof(int)*(n+));
flow+=dfs(S,0x3f3f3f3f);
}
return flow;
}
void me(int a,int b,int c)
{
e[++ne].to=b;e[ne].nxt=f1[a];f1[a]=ne;
e[ne].from=a;e[ne].cap=c;
e[++ne].to=a;e[ne].nxt=f1[b];f1[b]=ne;
e[ne].from=b;e[ne].cap=;
} }
int n,m;
int main()
{
int i,a,b,c;
scanf("%d%d%d%d",&n,&m,&F::S,&F::T);F::n=n;
for(i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
F::me(a,b,c);
}
printf("%d",F::solve());
return ;
}
(补上37行,42行改成41行,跑的要更快,但是感觉不太对所以没有写)
网络流--Dinic(自用,勿看)的更多相关文章
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- 网络流Dinic(本篇介绍最大流)
前言:看到网上Dinic和ISAP的比较,多数人认为ISAP更快,不容易爆栈.当然,也有少数人认为,在多数情况下,Dinic比较稳定.我认为Dinic的思路比ISAP更简明,所以选择了Dinc算法 介 ...
- ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
//有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- 网络流dinic ek模板 poj1273
这里只是用来存放模板,几乎没有讲解,要看讲解网上应该很多吧…… ek bfs不停寻找增广路到找不到为止,找到终点时用pre回溯,O(VE^2) #include<cstdio> #incl ...
- 模板——网络流Dinic
感谢这位大佬的博客:https://www.cnblogs.com/SYCstudio/p/7260613.html 给予了我莫大的帮助! 主要说一下网络流的几个注意点: 1.和二分图匹配相似,无法继 ...
- 最大网络流dinic
初始化flow(最大流量)为INF(极大值),建边(正向弧和反向弧) bfs寻找增广路看看有没有路,顺便进行深度标号.如果没有路直接结束输出flow. 如果有,我们按照深度dfs.dfs时注意在给正向 ...
- 网络流dinic实现总结
太羞耻了,搞了半天居然没发现自己写的不是dinic,直到被一道时限紧的题目卡掉才发现 int dfs(int now,int flow,int sum) { if(now==n) return flo ...
- mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看
create PROCEDURE myTestProcname(in score int ,out result varchar(100))BEGINIF score>60 THENset re ...
随机推荐
- 关于“C++语言程序设计”书的一个类
class book{ char* title; int num_pages; int cur_page;public: book(const char* theTitle, ...
- Material Design 之 定义状态栏(Status Bar)的颜色
Hey,好久不见.今天遇到一个问题,想要把Status Bar 和 Tool Bar的颜色弄成一样的,或者是类似的,例如Material Design: 图中Status Bar颜色比Tool Bar ...
- java-执行dos命令
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...
- 基于区域的全卷积神经网络(R-FCN)简介
在 Faster R-CNN 中,检测器使用了多个全连接层进行预测.如果有 2000 个 ROI,那么成本非常高. feature_maps = process(image)ROIs = region ...
- 激活层和pooling的作用
激活层: 激活函数其中一个重要的作用是加入非线性因素的,将特征映射到高维的非线性区间进行解释,解决线性模型所不能解决的问题 pooling层: 1. invariance(不变性),这种不变性包括tr ...
- HDMI 8193 配置
1, User space:ProjectConfig.mkMTK_HDMI_SUPPORT = yes MTK_MULTIBRIDGE_SUPPORT = yesMTK_INTERNAL_HDMI_ ...
- TQ210 —— S5PV210 uboot顶层Makefile分析
转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...
- js的常用正则表达式
1.在input框中只能输入金额,其实就是只能输入最多有两位小数的数字 //第一种在input输入框限制 <input type="text" maxlength=" ...
- ubuntu 安装配置 JDK7和Android Studio(apt-get方式)
Ubuntu 安装配置JKD 7 $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get ...
- Robot FrameWork基础学习(三)
一.关键字(Keyword)根据架构的区分可分为以下三层结构: 底层关键字.公共层关键字.特性关键字. 底层关键字一般与最底层的代码在关系,为上层公共关键字和特性关键字提供接口. 公共层关键字:一般是 ...