0.网络流解释:如果你还是不能理解,我们就换一种说法,假设s城有inf个人想去t城,但是从s到t要经过一些城市才能到达,(以上图为例)其中s到3城的火车票还剩10张,3到t的火车票还剩15张,其他路以此类推,问最终最多能有多少人能到达t城?(假设这个地区只有火车,没有汽车飞机,步行和骑自行车会累死就不考虑了,再假设所有人都买得起火车票。)

1.https://www.cnblogs.com/zsboy/archive/2013/01/27/2878810.html EK 算法 ,但是“反悔”那个图应该9 1 9 1 9 。

2. Dinic算法可以每次找出多条增广路,为什么要分层呢?分层图是有向无环图。

每bfs一次的结果在运行框中。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
int hd[10005],cnt=-1,d[10005],vis[10005],cur[10005];
struct Edge{
int to,vl,nxt;
}edge[200005];
void add(int u,int v,int w)
{
cnt++;
edge[cnt].to =v;
edge[cnt].nxt=hd[u];
edge[cnt].vl=w;
hd[u]=cnt;
}
queue<int> q;
int s,t;
int bfs()
{
memset(d,0,sizeof d);
memset(vis,0,sizeof vis);
while(q.size()) q.pop() ;//这个不写会T
d[s]=1;vis[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=hd[u];i!=-1;i=edge[i].nxt)//边是从零开始的,因此这里可以不能是i>0 //同一条边还有容量可以流怎么办,边已经遍历完
{
int v=edge[i].to;
if(!vis[v] && edge[i].vl>0)
{
vis[v]=1;
d[v]=d[u]+1;
q.push(v);
if(v==t)return 1;
}
}
}
return 0;
} int dinic(int u,int res)//
{
if(u==t) return res;
int sum=0;
for(int i=cur[u];i!=-1;i=edge[i].nxt)
{
cur[u]=i;//当前弧优化,不符合的通道就不再判断了
int v=edge[i].to;
if(d[u]+1==d[v] && edge[i].vl>0 && res>0)//
{
int k=dinic(v,min(res,edge[i].vl)); //剩余流量及该路径容量的最小值
if(!k)
{
d[v]=0;//去掉增广完的点
break;
}
edge[i].vl-=k;
edge[i^1].vl+=k;
res-=k;
sum+=k;
}
}
return sum;
}
int n,m,u,v,w,flow,mxflow;
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
memset(hd,-1,sizeof hd);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,0);
}
// for(int i=1;i<=n;i++)
// cout<<d[i]<<" ";
// cout<<endl;
while(bfs()){
while(flow=dinic(s,inf))
mxflow+=flow;
}
cout<<mxflow<<endl;
}

Luogu 3376 【模板】网络最大流的更多相关文章

  1. 【洛谷 p3376】模板-网络最大流(图论)

    题目:给出一个网络图,以及其源点和汇点,求出其网络最大流. 解法:网络流Dinic算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #i ...

  2. 【Luogu】P3376网络最大流模板(Dinic)

    最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了 ...

  3. luogu 3376 最小费用最大流 模板

    类似EK算法,只是将bfs改成spfa,求最小花费. 为什么可以呢,加入1-3-7是一条路,求出一个流量为40,那么40*f[1]+40*f[2]+40*f[3],f[1]是第一条路的单位费用,f[2 ...

  4. 【Luogu P3376】网络最大流

    Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成 ...

  5. [模板]网络最大流 & 最小费用最大流

    我的作业部落有学习资料 可学的知识点 Dinic 模板 #define rg register #define _ 10001 #define INF 2147483647 #define min(x ...

  6. P3376 [模板] 网络最大流

    https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic EK 292ms #include <bits/std ...

  7. P3376 【模板】网络最大流(luogu)

    P3376 [模板]网络最大流(luogu) 最大流的dinic算法模板(采取了多种优化) 优化 时间 inline+当前弧+炸点+多路增广 174ms no 当前弧 175ms no 炸点 249 ...

  8. Dinic最大流 || Luogu P3376 【模板】网络最大流

    题面:[模板]网络最大流 代码: #include<cstring> #include<cstdio> #include<iostream> #define min ...

  9. luogu P3376 【模板】网络最大流(no)ek

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

  10. 『题解』洛谷P3376 【模板】网络最大流

    Problem Portal Portal1:Luogu Description 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. Input 第一行包含四个正整数\(N,M,S,T\),分 ...

随机推荐

  1. 安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.

    安装adb工具 https://dl.google.com/android/repository/platform-tools_r29.0.6-windows.zip 从以上地址下载,然后解压到任意目 ...

  2. Linux服务器上创建新用户

    一.在/home目录下新建userName目录 sudo useradd -m -s /bin/bash userName 二.设置密码 sudo passwd userName

  3. e3mall商城的归纳总结5之修改商品分类、e3mall—content的搭建

    说在前面的话 本节基本上没有用到新的知识点.主要还是对数据库的增删改查以及创建了一个新的内容模块. 新增商品分类 由于easyUI的Tree需要三个字段(Id.state.text), [{ &quo ...

  4. Android开发之将Edittext输入弹出的软键盘设置搜索确定键。详细代码,已验证可用。

    1,首先在布局中添加 android:imeOptions="actionSearch 2,然后java代码中设置代码: et_input_password.setOnEditorActio ...

  5. Data Vault玩转数据仓库(三)

    在Data Vault 2.0版本里,其不只是针对数据仓库的建模,同时也包含了架构,方法论以及实现.这篇挑几个概念,附上我个人对其的理解.同时也把这个系列的名字改成<Data Vault玩转数据 ...

  6. unity3d android动态更新dll

    基本是参考这篇文章:http://blog.sina.com.cn/s/blog_9e5d42ee0102vvtg.html,进行了增删一波. 大略说一下基本步骤:1.下载mono源码,修改源码,编译 ...

  7. The Unique MST(最小生成树的唯一性判断)

    Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...

  8. vue computed实现原理

    在 Vue.prototype._init 方法中的 initState 中有一个对于computed 的判断,如果有则执行 initComputed 方法初始化 computed. function ...

  9. mysql排序的问题与获取第几高的分数的信息

    1:先截图看效果 2:完整的SQl语句 SELECT * FROM studentscore; -- ------------------ SET @maxscore=(SELECT MAX(scor ...

  10. leetcode刷题-56合并区间

    题目 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]] 思路 通过设置一个移 ...