#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn = , INF = 0x7fffffff;
int d[maxn], head[maxn];
int n, m, s, t;
struct edge{
int u, v, f, c, next;
}Node[*maxn]; void add(int u, int v, int c, int f, int i)
{
Node[i].u = u;
Node[i].v = v;
Node[i].f = f;
Node[i].c = c;
Node[i].next = head[u];
head[u] = i;
} int bfs()
{
queue<int> Q;
mem(d,);
Q.push(s);
d[s] = ;
while(!Q.empty()){
int u = Q.front(); Q.pop();
for(int i=head[u]; i!=-; i=Node[i].next)
{
edge e = Node[i];
if(!d[e.v] && e.c > e.f)
{
d[e.v] = d[e.u] + ;
Q.push(e.v);
}
}
} return d[t] != ;
} int dfs(int u, int cap)
{
// cout<< u << " " << cap <<endl;
if(u == t)
return cap;
for(int i=head[u]; i!= -; i=Node[i].next)
{
edge e = Node[i];
if(d[e.v] == d[e.u] + && e.c > e.f)
{
int V = dfs(e.v, min(cap, e.c - e.f));
if(V > ){
Node[i].f += V;
Node[i^].f -= V;
return V;
}
}
}
return ;
}
int Dinic()
{
int ans = ;
while(bfs())
{
while(int l = dfs(s,INF))
ans += l;
}
return ans;
} int main()
{
mem(head,-);
cin>> n >> m >> s >> t;
int cnt = ;
for(int i=; i<m; i++)
{
int u, v, w;
cin>> u >> v >> w;
add(u, v, w, , cnt++);
add(v, u, , , cnt++);
}
cout<< Dinic() <<endl; return ;
}

网络流Dinic模板的更多相关文章

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

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

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

    #include<cstring> #include<cstdio> #define FOR(i,f_start,f_end) for(int i=f_startl;i< ...

  3. 网络流dinic模板,邻接矩阵+链式前向星

    //这个是邻接矩阵的#include<iostream> #include<queue> #include<string.h> #include<stdio. ...

  4. POJ 2987 Firing 最大流 网络流 dinic 模板

    https://www.cnblogs.com/137shoebills/p/9100790.html http://poj.org/problem?id=2987 之前写过这道题,码一个dinic的 ...

  5. hdu 1532 Dinic模板(小白书)

    hdu1532 输入n,m. n条边,m个点,之后给出a到b的容量,求1到m的最大流. 注意:Dinic只能调用一次,因为原理是改变cap的值,如果调用多次一样的,那么第一次会对,其余的都会是0,因为 ...

  6. 最大流算法 ISAP 模板 和 Dinic模板

    ISAP // UVa11248 Frequency Hopping:使用ISAP算法,加优化 // Rujia Liu struct Edge { int from, to, cap, flow; ...

  7. 网络流——SAP模板

    //网络流SAP模板,复杂度O(N^2*M) //使用前调用init(源点,汇点,图中点的个数),然后调用add_edge()加边 //调用getflow得出最大流 #define N 55 #def ...

  8. 洛谷P3376【模板】网络最大流  Dinic模板

    之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从 ...

  9. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

随机推荐

  1. SkylineGlobe 如何实现FlyTo定位到目标点之后触发的事件函数

    之前有朋友问,如何在Skyline里面实现FlyTo定位到目标点之后触发的事件函数呢? 下面的这段代码,就可以帮你解决这个问题. <!DOCTYPE html PUBLIC "-//W ...

  2. 如何让.NET Core支持GB2312和GBK

    在.NET Core中,默认是不支持GB2312和GBK编码的. 例如我们如果新建一个.NET Core控制台项目,然后在其Main方法中使用如下代码: using System; using Sys ...

  3. js求数组的最大值--奇技淫巧和笨方法

    写这篇文章的原因 我目前做的项目很少用到算法,于是这方面的东西自然就有点儿生疏.最近的一次编码中遇到了从数组中获取最大值的需求,当时我不自觉的想到了js的sort()函数,现在想来真是有些“罪过”,当 ...

  4. BZOJ4614/UVA1742 Oil 计算几何

    传送门 题意:在平面直角坐标系中给出$N$条互不相交的.与$x$轴平行.且在$x$轴上方的线段,每一条线段的价值为其长度.求一条不与$x$轴平行的直线,使得与这条直线相交的线段的价值之和最大,求出这个 ...

  5. CF101D Castle 树形DP、贪心

    题目传送门 题意:给出一个有$N$个点的树,你最开始在$1$号点,经过第$i$条边需要花费$w_i$的时间.每条边只能被经过$2$次.求出到达除$1$号点外所有点的最早时间的最小平均值.$N \leq ...

  6. 计算2个时间之间经过多少Ticks

    Ticks是一个周期,存储的是一百纳秒,换算为秒,一千万分之一秒.我们需要计算2个时间之间,经过多少Ticks,可以使用下面的方法来实现,使用2个时间相减. 得到结果为正数,是使用较晚的时间减去较早的 ...

  7. [Oracle]为何Archivelog 没有马上被删除

    [Oracle]为何Archivelog 没有马上被删除 客户设置了 Archivelog 的 deletion policy 是 CONFIGURE ARCHIVELOG DELETION POLI ...

  8. AT2134 Zigzag MST

    题面 题解 这个题目主要是连边很奇怪,但是我们可以发现一个性质:权值是递增的. 于是像下图的连边:(加边方式为\((A_1, B_1, 1)\)) 其实可以等价于如下连边: 于是我们将其变成了在环上连 ...

  9. Microsoft Office软件自定义安装目录

    Microsoft Office安装时不能手动设置安装目录,本文描述通过修改注册表的方式自定义安装目录 1.同时按下快捷键 win + r 启动运行 2.输入 regedit 打开注册表 3.找到   ...

  10. Html5计算MD5值

    教程: http://www.tuicool.com/articles/InEBNz 组件: https://github.com/satazor/js-spark-md5