网络流 Dinic 算法笔记

news/2024/12/28 12:47:41/文章来源:https://www.cnblogs.com/yingxilin/p/18637399

网络流 Dinic 算法笔记

步骤

  • 建图,初始时令反向边权值为零,之后将该边每次用去的权值累计赋值给该反向边。
  • 分层,每次只能找下一个层的点。
  • 每次多向找增广路,并将跑满的边去掉,之后再去跑残量网络,直到榨干所有可用管道。

大致就这样,然后注意时时减脂优化。

code

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=200+5;
int iter[N];
int n,m,s,t;
const int MAXN=(1<<30);
struct edge{int to,v,re;
};
vector<edge>g[N];
#define FOR(i,_l,_r)  for(int i=_l;i<=_r;i++)
void build(int u,int v,int w){g[u].push_back(edge{v,w,(int)g[v].size()});g[v].push_back(edge{u,0,(int)g[u].size()-1});
}
int depth[N];
void bfs(){memset(depth,-1,sizeof depth);queue<int>q;depth[s]=0;q.push(s);while(q.size()){int u=q.front();q.pop(); for(auto &e:g[u]){if(e.v>0&&depth[e.to]<0){depth[e.to]=depth[u]+1;q.push(e.to);}}}
}
int dfs(int u,int f){if(u==t||!f) return f;int ans=0;for(int &i=iter[u];i<(int)g[u].size();i++){//当前弧优化edge &e=g[u][i];if(e.v>0&&depth[e.to]==depth[u]+1){int d=dfs(e.to,min(f,e.v));if(d){e.v-=d;g[e.to][e.re].v+=d;    f-=d;ans+=d;if(!f) break;}}}return ans;
}
int dinic(){int ans=0;while(1){bfs();if(depth[t]<0) return ans;memset(iter,0,sizeof iter);ans+=dfs(s,MAXN);}
}
signed main(){cin>>n>>m>>s>>t;FOR(i,1,m){int u,v,w;cin>>u>>v>>w;build(u,v,w);}cout<<dinic()<<endl;return 0;
}

调试心得小结

  • 注意存图时的反向边是建在哪个节点上的。
  • !f 只能用来判断 \(f\) 是否为 \(0\) ,其于 f<0 并非等价,比如当 \(f\) 的值为 \(-1\) 时会出现无法预料的错误(调了好久)。
  • #define int long long ,不要吧 intlong long 错位,是用前一个关键字来代替后一个关键字,与 typedef 刚好相反。

完结撒花。

yingxilin
Qian·JX の joker
2024-12-28 于玉山一中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860357.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“代码之舟”——2024秋软工实践纪

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 回顾这一学期所完成的软工任务,总结这一学期的收获学号 102202102 王子聪引言: 在上这门课之前还没有真正的体…

Python-DdddOcr的简单使用

前言:我们在做WEB端UI自动化时,会遇到图片验证码校验的登录方式。我在之前的文章也做过介绍:https://www.cnblogs.com/TSmagic/p/16082799.html (Pillow + pytesseract + tesseract-ocr 破解简单的图形验证码)https://www.cnblogs.com/TSmagic/p/16117861.html(Python + 超…

Omnissa ThinApp 2412 - 应用虚拟化软件

Omnissa ThinApp 2412 - 应用虚拟化软件Omnissa ThinApp 2412 - 应用虚拟化软件 Omnissa ThinApp, formerly VMware ThinApp 请访问原文链接:https://sysin.org/blog/omnissa-thinapp/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgOmnissa ThinApp 通过将应用…

Omnissa App Volumes 4, version 2412 - 实时应用程序交付系统

Omnissa App Volumes 4, version 2412 - 实时应用程序交付系统Omnissa App Volumes 4, version 2412 - 实时应用程序交付系统 Omnissa App Volumes, formerly VMware App Volumes 请访问原文链接:https://sysin.org/blog/omnissa-app-volumes/ 查看最新版。原创作品,转载请保…

CSP-J2/S2 2024 游记

前情提要:CSP-J/S 2023 写这篇文章的时候,心情比较复杂。 哎,结局还算圆满。初赛 之前那个写的不好再写一遍() 两个都在 WFLS,也就是本校考 qaq。 J 在大礼堂考,没啥好说的,太简单了(除了格雷码,好难没学过 /ll) 乐,考试结束前 3min 还在改卷子() 省流:98。 S 在…

部署traefik 1.7服务

部署traefik服务主要是三个yaml文件:traefik-deployment.yaml,traefik-rbac.yaml,ui.yaml也可以使用traefik-ds.yaml,这个方式体现。 [root@k8smaster traefiks]# ll总用量 12-rw-r--r--. 1 root root 1114 12月 26 22:14 traefik-deployment.yaml-rw-r--r--. 1 root root …

2024.12.26 周四

2024.12.26 周四Q1. 1100 There is a ribbon divided into $n$ cells, numbered from $1$ to $n$ from left to right. Initially, an integer $0$ is written in each cell. Monocarp plays a game with a chip. The game consists of several turns. During the first turn, …

UML之集合类型

无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。 1.Set Set是一个不允许存在重复值且未排序的集合。 例如一…

《计算机基础与程序设计》第十四周学习总结

学期(2024-2025-1) 学号(20241412) 《计算机基础与程序设计》第十四周学习总结 作业信息这个作业属于哪个课程 <班级的链接> 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接> 2024-2025-1计算机基础与程序设计第十四周作业)教材学习内容…

2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结

2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标 <《C语言…

【Windows】 国内安装Scoop包管理器(镜像加速)

由于国内github访问不通畅,且多数开源软件托管在github,导致scoop体验极差,甚至安装Scoop这一步都无法进行。国内有位作者将scoop主程序托管在gitee,增加分流逻辑处理安装与更新所涉及的资源。 链接: https://gitee.com/scoop-installer/scoop 安装scoop主程序 1.1 初次安…

07 _ Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?

07 _ Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?你好,我是程远。今天我想聊一聊平均负载(Load Average)的话题。 在上一讲中,我们提到过CPU Cgroup可以限制进程的CPU资源使用,但是CPU Cgroup对容器的资源限制是存在盲点的。 什么盲点呢?就是无法通过CP…