洛谷p3376 https://www.luogu.com.cn/problem/P3376

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 1000000 + 5;
int n,m,be,en;
queue<int>q;
int to[maxn];
int cost[maxn];
int head[maxn];
int nex[maxn];
int cnt; void add(int x,int y,int z)
{
cnt++;
nex[cnt]=head[x]; //先把指针指向上次的位置
head[x]=cnt; //然后把头指向自己
to[cnt]=y;
cost[cnt]=z;
} int level[maxn];
bool bfs() //深度打表(分层)
{
memset(level,-1,sizeof(level));
level[be]=0;
q.push(be);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=nex[i])
{
int v=to[i];
if(cost[i]!=0&&level[v]==-1) //流量大于0并且未被访问
{
level[v]=level[u]+1;
q.push(v);
}
}
}
if(level[en]!=-1) return 1;
else return 0;
} int dfs(int u,int flow) //dfs找最大流 对于源点,流入它的最大流量是无限大 flow最大可行流 ret剩余可行流量
{
if(u==en) return flow;
int ret=flow;
for(int i=head[u];i!=-1;i=nex[i])
{
if(ret<=0) break;
int v=to[i];
if(cost[i]!=0&&level[u]+1==level[v])
{
int k=dfs(v,min(ret,cost[i])); //把能流的都给下一个点
ret-=k;cost[i]-=k;cost[i^1]+=k; //i^1就是反向边
}
}
return flow-ret; //最大可行流减去剩余可行流就是实际流量
} int dinic()
{
int ans=0;
while(bfs()==true) //还能分层就不断增广
{
ans+=dfs(be,INF);
}
return ans;
} int main()
{
scanf("%d%d%d%d",&n,&m,&be,&en);
memset(head,-1,sizeof(head));
int x,y,z;
cnt=-1; //从0开始 0 1 一对 2 3 一对
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z); add(y,x,0);
}
printf("%d\n",dinic());
return 0;
}

网络流(dinic算法)的更多相关文章

  1. poj 1459 Power Network : 最大网络流 dinic算法实现

    点击打开链接 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20903   Accepted:  ...

  2. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  3. 网络流(dinic算法)

    网络最大流(dinic) 模型 在一张图中,给定一个源点s,给定汇点t,点之间有一些水管,每条水管有一个容量,经过此水管的水流最大不超过容量,问最大能有多少水从s流到t(s有无限多的水). 解法 di ...

  4. 网络流Dinic算法

    我的模板 例题: https://vjudge.net/problem/HDU-4280 struct Edge { int lst; int from; int to; int cap; int f ...

  5. 高效的网络流dinic算法模版

    #include <cstring> #include <algorithm> #include <vector> #define Maxn 120010 #def ...

  6. POJ 3281 [网络流dinic算法模板]

    题意: 农场主有f种食物,d种饮料,n头牛. 接下来的n行每行第一个数代表第i头牛喜欢吃的食物数量,和第i头牛喜欢喝的饮料数目. 接下来分别是喜欢的食物和饮料的编号. 求解:农场主最多能保证几头牛同时 ...

  7. 网络流Dinic算法模板 POJ1273

    这就是以后我的板子啦~~~ #include <queue> #include <cstdio> #include <cstring> #include <a ...

  8. POJ 3281 网络流dinic算法

    B - Dining Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  9. [知识点]网络流之Dinic算法

    // 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html      ...

  10. 网络流入门—用于最大流的Dinic算法

    "网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...

随机推荐

  1. Git【入门】这一篇就够了

    前言 欢迎关注公众号,白嫖原创PDF,也可以催更,微信搜:JavaPub,回复:[666] Git 在生产工作中是使用频率很高的工具,但我发现很多文章只是对它做了简单的提交命令说明,真正遇到 版本冲突 ...

  2. Python实用笔记 (19)面向对象编程——访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...

  3. MongoDB快速入门教程 (3.3)

    3.4.聚合 3.4.1.什么是聚合? MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 例如上图 ...

  4. Buy a Ticket 【最短路】

    题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...

  5. Jquery的一些方法

    $.trim(str);说明:去掉字符串首尾空格.

  6. Net链接Sql Server语法

    1.登录名.密码链接 </system.web> <appSettings> <!--<add key="MSSqlConnectionString&qu ...

  7. CountDownLatch和CyclicBarrier 傻傻的分不清?超长精美图文又来了

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  8. asp.net core 发布包含文件

    这样这个文件在发布的时候,就会包含进去了.

  9. SQL注入原理及代码分析(二)

    前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...

  10. C#数据类型及其转换详解

    前言 在 C# 中,数据类型可以分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 其中指针类型只在不安全代码下使 ...