#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q;
int INF=1e9;
int n,m,head[],cur[],ct=,s,t,d[],ans;
struct N{
int to,next,w;
}edge[];
void add(int x,int y,int z)
{
edge[++ct]=(N){y,head[x],z};head[x]=ct;
edge[++ct]=(N){x,head[y],};head[y]=ct;
}
bool bfs()
{
memset(d,,sizeof d);
while(q.size())q.pop();
d[s]=;
q.push(s);
while(q.size())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(!d[u]&&edge[i].w)//残量网络
{
d[u]=d[x]+;
q.push(u);
}
}
}
return d[t];
}
int dfs(int x,int f)
{
if(x==t)return f;//
int res=,tmp=;
for(int i=cur[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(d[u]==d[x]+&&edge[i].w)
{
tmp=dfs(u,min(edge[i].w,f-res));
edge[i].w-=tmp;
edge[i^].w+=tmp;
res+=tmp;
if(edge[i].w)cur[x]=i;
if(res==f)return f;//
}
}
if(!res)d[x]=;//剪枝
return res;
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%d%d",&s,&t);
int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
while(bfs())
{
for(int i=;i<=n;i++)cur[i]=head[i];
ans+=dfs(s,INF);
}
printf("%d",ans);
return ;
}

网络最大流dinic模板的更多相关文章

  1. P3376 【模板】网络最大流dinic算法

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  2. 网络最大流Dinic

    1.什么是网络最大流 形象的来说,网络最大流其实就是这样一个生活化的问题:现在有一个由许多水管组成的水流系统,每一根管道都有自己的最大通过水流限制(流量),超过这个限制水管会爆(你麻麻就会来找你喝茶q ...

  3. luogu3376 【模板】网络最大流 dinic

    当前弧优化 #include <iostream> #include <cstring> #include <cstdio> #include <queue& ...

  4. P3376 【模板】网络最大流 dinic详解

    dinic的核心在于分层和多路增广. 分层的意思是,对于图用bfs搜出每一层,避免出现dfs深度过深的情况. 多路增广,利用的是dfs的回溯性质,这样就可以在一个点增广出它的所有流量. #includ ...

  5. 网络流--最大流dinic模板

    标准的大白书式模板,除了变量名并不一样……在主函数中只需要用到 init 函数.add 函数以及 mf 函数 #include<stdio.h> //差不多要加这么些头文件 #includ ...

  6. 网络最大流 Dinic算法

    前言 看到网上好多都用的链式前向星,就我在用 \(vector\) 邻接表-- 定义 先来介绍一些相关的定义.(个人理解) 网络 一个网络是一张带权的有向图 \(G=(V,E)\) ,其中每任意一条边 ...

  7. 最大流dinic模板

    循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; in ...

  8. 网络流-最大流 Dinic模板

    #include <bits/stdc++.h> using namespace std; #define MP make_pair #define PB push_back #defin ...

  9. hdu-4289 最大流Dinic模板题

    拆点,套模板. 详情见代码. // // main.cpp // hdu_4289 // // Created by Luke on 16/8/29. // Copyright © 2016年 Luk ...

随机推荐

  1. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。

    // 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  2. 【特征匹配】SIFT原理与C源代码剖析

    相关: KD树+BBF算法解析 SURF原理与源代码解析 SIFT的原理已经有非常多大牛的博客上做了解析,本文重点将以Rob Hess等人用C实现的代码做解析,结合代码SIFT原理会更easy理解.一 ...

  3. php如何在原来的时间上加一天?一小时?

    <?php echo "今天:",date('Y-m-d H:i:s'),"<br>"; echo "明天:",date( ...

  4. EasyPlayer Android RTSP播放器延迟再优化策略

    EasyPlayer延迟再优化策略 EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是我 ...

  5. maven snapshot和release版本的区别(转)

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  6. Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

    Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

  7. SVN设置删除权限

    svn是很多企业和个人用的版本控制软件,非常方便.通用的权限控制在auth文件中,但是缺点是权限较大,w的权限一旦赋予,相应用户都可以有删除svn文件的权限,但是如果不赋予w权限,又没办法commit ...

  8. Ceph集群rbd-mirror A、B区域备份实施方案

    Ceph集群rbd-mirror A.B区域备份实施方案 备注:首先准备两个集群, 并确认其状态,集群的准备过程在这就不做陈述 1.查看集群状态 A区域 [root@ceph2111 ceph]# c ...

  9. 【Windows】修改远程桌面端口号

    echo off echo 修改远程连接端口 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Se ...

  10. Java for LeetCode 090 Subsets II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...