题目描述

如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。

输入输出格式

输入格式:

第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)

输出格式:

一行,包含一个正整数,即为该网络的最大流。

输入输出样例

输入样例#1:

4 5 4 3
4 2 30
4 3 20
2 3 20
2 1 30
1 3 40

输出样例#1:

50

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=10,M<=25

对于70%的数据:N<=200,M<=1000

对于100%的数据:N<=10000,M<=100000

样例说明:

题目中存在3条路径:

4-->2-->3,该路线可通过20的流量

4-->3,可通过20的流量

4-->2-->1-->3,可通过10的流量(边4-->2之前已经耗费了20的流量)

故流量总计20+20+10=50。输出50。

首次接触这种写法

真神奇

屠龙宝刀点击就送

#include <cstring>
#include <vector>
#include <cstdio>
#include <queue>using namespace std;struct node
{int to,next,dis;
}edge[100001*2];
int tot=1,Answer,dis[100001],head[100001*20],n,m,s,t,i,j;
void add(int from,int to,int w)
{tot++;edge[tot].next=head[from];edge[tot].to=to;edge[tot].dis=w;head[from]=tot;
}
bool bfs()
{queue<int>q;memset(dis,-1,sizeof(dis));dis[s]=0;q.push(s);while(!q.empty() ){int Top=q.front() ;q.pop() ;for(i=head[Top];i;i=edge[i].next){if(dis[edge[i].to]==-1&&edge[i].dis>0){dis[edge[i].to]=dis[Top]+1;if(edge[i].to==t) return 1;else q.push(edge[i].to); }}}return 0;
}
int work(int now,int f)
{if(now==t||f==0) return f;int rest=0;for(int i=head[now];i;i=edge[i].next){int v=edge[i].to;if(edge[i].dis>0&&dis[v]==dis[now]+1){int t=work(v,min(f,edge[i].dis));rest+=t;f-=t;edge[i].dis-=t;edge[i^1].dis+=t;if(f==0) return rest;}}return rest;
}
int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);int u,v,l;for(i=0;i<m;++i){scanf("%d%d%d",&u,&v,&l);add(u,v,l);add(v,u,0);}while(bfs()) Answer+=work(s,1e8);printf("%d",Answer);return 0;
}

转载于:https://www.cnblogs.com/ruojisun/p/6504415.html

洛谷 P3376 【模板】网络最大流相关推荐

  1. 【洛谷P3376】网络最大流【网络流】

    分析 网络流算法本身是之前学过的,今天拿出来复习打个板子. 最原始的思路应该是搜索每一条路,每次进行增广的操作,知道不能增广为止.显然,这种思路复杂度比较高. 如何进行优化?就是dinic算法.上面那 ...

  2. 洛谷P1262 间谍网络题解

    洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...

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

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

  4. 【洛谷 - P3376 】【模板】网络最大流

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

  5. 洛谷P3376 网络最大流

    不是讲网络流,就是存个板子 另外我的Dinic跑得比EK慢一倍可还行( 附两份比较好的教程,均来自洛谷日报 EK\sf \color{blue}EKEK Dinic\sf \color{blue}Di ...

  6. 洛谷P3980 志愿者招募——费用流

    洛谷P3980 [NOI2008]志愿者招募--费用流 题目介绍 题目描述 输入格式 输出格式 测试样例 题解 代码 题目介绍 题目描述 链接: 传送门. 申奥成功后,布布经过不懈努力,终于成为奥组委 ...

  7. 【ybt金牌导航3-2-1】【luogu P3376】网络最大流【Dinic算法】

    网 络 最 大 流 网络最大流 网络最大流 题目链接:ybt金牌导航3-2-1 / luogu P3376 题目 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数 ...

  8. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  9. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

最新文章

  1. 重磅!2019年诺贝尔生理学或医学奖揭晓,“细胞感知氧气通路”摘得桂冠
  2. 微信二次修改微信号_如何二次修改微信号?简单易懂教程
  3. oracle SQL 命令行(三.增删改查)
  4. python请求post无返回结果_Python请求POST返回不完整的内容
  5. Java里try catch的简单用法
  6. 添加远程链接MySQL的权限
  7. 【clickhouse】clickhouse 配置 安装目录
  8. Oracle时间函数(转)
  9. [转载] 生活小常识 :joke:
  10. 《世界历史》—史前时期的分期
  11. moments音标_moment的意思在线翻译,解释moment中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
  12. 通过IMAP方式迁移U-Mail邮件到Exchange 2013之2008R2 AD搭建!
  13. 国庆节想吃想玩要不去这? 央视推荐——新疆独库公路
  14. 移动硬盘损坏怎么恢复?看完再也不怕丢失数据
  15. 【Oracle】并行等待之PX Deq: Join ACK
  16. K8sAPI接口文档
  17. 第五章 长度及线位移测量
  18. html长图转换成pdf,iOS将HTML页面转换成PDF文件保存到本地并分享传输文件
  19. 蓝桥杯scratch编程题(2)
  20. 蛋白组学资讯:百趣协助,非小细胞癌转移机制新解

热门文章

  1. android 类加载器 DexClassLoader的用法,以及引出的插件架构
  2. 怎样用modelsim做后仿真
  3. 第三部分 基本类型:第16章 数组
  4. 网站常见攻击与防御汇总
  5. 挨踢人生路--记我的10年18家工作经历 - 第16家公司,英国公司――第一次当经理...
  6. c语言程序设计实验教学,C语言程序设计实验教学改革研究
  7. git配置用户名和密码_IDEA配置码云教程
  8. 待续未完- 自己写后台内容管理程序 - 完全手写不用框架的
  9. java中等待所有线程都执行结束
  10. R3Query 大数据分析系统2017将发布免费个人版