算法
Visors
这个作者很懒,什么都没留下…
展开
-
Tarjan求无向图割点
文章目录无向图的割点及判定对搜索起点的处理对重边的处理参考实现Tarjan算法的核心思想已经在《Tarjan求无向图割边》中介绍了,不清楚的读者可以先行阅读那部分内容,这里直接从介绍割点开始。无向图的割点及判定对于无向连通图G(V,E)G(V,E)G(V,E),若删去点v∈Vv\in Vv∈V及其邻边∀u∈{V−v},(v,u)∈E\forall u\in \{V-v\}, (v,u)\in E∀u∈{V−v},(v,u)∈E后,GGG被分为两个或更多互不连通的子图,则称vvv为割点或割顶。根据上面原创 2020-10-31 14:18:19 · 271 阅读 · 1 评论 -
Tarjan求无向图割边
There's nothing in your eyesThat marks where you criedAll is blank all is blindDead inside the inner mind ——YMO《Behind The Mask》文章目录Tarjan算法无向连通图的搜索树时间戳dfn追溯值low无向图的割边及判定对重边的处理参考实现Tarjan算法不得不说Robert Tarjan真的是大师,发个网站大家感受一下——论文索引。这里要说的Tarjan算法用于解.原创 2020-10-31 13:04:53 · 380 阅读 · 0 评论 -
第十届蓝桥杯C++ B组省赛解题思路
A 组队最稳妥的方法是把数据copy出来写个搜索,当然也可以尝试直接在纸上找答案,有风险。另外还有一种想法,因为一眼看上去这个答案就很接近500,先找到一组接近500的情况,然后类似找增广路一样看能否增大解。B 年号字串这不就是tmd26进制么,除26取余。C 数列求值写个递推,又快。除非你使用python,否则要对每项%10000.D 数的分解直接枚举。E 迷宫BFS。处理字典序仅需在建立方向数组时按照上右左下顺序即可。F 特别数的和好水//// Created by Viso原创 2020-10-16 02:36:17 · 447 阅读 · 0 评论 -
匈牙利算法
很早之前就学过最近再温习一下,毕竟匈牙利算法虽然在解决二分图最大匹配问题上复杂度不如Dinic,但编程复杂度低很多,而且不容易写错。其实如果对网络流有所涉猎,再来学习二分图最大匹配问题就太好理解了。此处默认读者已经了解了二分图最大匹配的问题模型及基本的网络流知识,若对网络流没有了解可以参见我的另一篇博客网络流的核心思想.二分图问题可以很容易转化成网络流模型,即在原图中添加一源一汇,源点与左部各点相连,容量为111,右部各点与汇点相连,容量为111。由是我们只需跑一遍最大流即可求得二分图最大匹配。例如对原创 2020-10-08 11:34:25 · 218 阅读 · 0 评论 -
最小路径覆盖转二分图模型
最小路径覆盖所谓DAG的路径覆盖,即在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联。#mermaid-svg-8vopoyGDkRf90ox0 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-8vopoyGDkRf90ox0 .label text{fill:#333}#m原创 2020-10-07 20:07:39 · 213 阅读 · 0 评论 -
关押罪犯(二分+二分图判定)
题意其实就是给出了一个罪犯冲突网络,我们需要将一些罪犯分进两座监狱,以此删去一部分边。由于一名罪犯不可能即跟自己监狱里的狱友起冲突,又跟另一座监狱里的罪犯起冲突,所以显然这是一个二分图模型,即两部分内的罪犯各自不跟自己部分的罪犯起冲突(并不是两座监狱里的罪犯集)。前面说到,我们的操作是删去一部分边,使最后权值最大的边最小,而又因为图需成立,所以显然删去边后我们需要保证图最终为二分图。由于本题答案具备单调性,即如果任取一个界限xxx,我们删去所有权值大于等于xxx的边后,如果剩余图为二分图,则xxx合法,原创 2020-10-06 21:01:52 · 253 阅读 · 0 评论 -
网络流24题之太空飞行计划——最大权闭合图转最大流模型
做网络流24题时感觉就是对建图能力的挑战,本来应该好好整理一下的,奈何时间不足,尽在此简述一下。一开始做这题时想了另外一个建图方式,但实际上是我读错题目了。这题只要求净收益最大,而不要求所有实验都需要进行。只关心收益的情况下,我们就可以考虑一种合适的建图方法,仅以钱为权重。这里就可以使用闭合图模型。闭合图不是环看见闭合图这个名词,相比很多人都会以为是含有一个很大的环的图(你懂的),但事实上并不是。定义一个有向图G=(V,E)G=(V,E)G=(V,E)的闭合图(closure)是该有向图的一个点集,原创 2020-10-02 18:43:00 · 155 阅读 · 0 评论 -
MCMF (EK + SPFA)
//// Created by Visors on 2020/9/30.//// 题目名:【模板】最小费用最大流// 题目来源:luogu// 题目链接:https://www.luogu.com.cn/problem/P3381// 算法:MCMF.cpp// 用途:最小费用最大流// 时间复杂度:O(TODO)//#include <bits/stdc++.h>using namespace std;const int oo = 0x3f3f3f3f;typ原创 2020-10-02 11:28:57 · 332 阅读 · 0 评论 -
ISAP算法
ISAP 的意思是 Improved SAP ,即改进的 SAP ,而 SAP(Shortest Augument Path,最短增广路)算法其实指的就是 Edmonds-Karp 算法。但事实上,ISAP 更像是 Dinic ,而不是 SAP。原创 2020-09-28 15:22:43 · 1452 阅读 · 1 评论 -
Dinic算法
相比于EK算法,Dinic算法在稀疏图上效率相当(可视n、m相近),而在稠密图上的处理更优秀。对网络流基本思想不清楚可参见我的另一篇博客《网络流的核心思想》。分层思想Dinic算法在每次增广前,先用 BFS 来将图分层。设源点的层数为000,那么一个点的层数便是它离源点的最近距离。通过分层,可起到如下两种效果:如果不存在到汇点的增广路(即汇点的层数不存在),我们即可停止增广。确保我们找到的增广路是最短的(每次找增广路的时候,都只找比当前点层数多111的点进行增广)。两个优化多路增广:在原创 2020-09-27 04:42:28 · 2759 阅读 · 0 评论 -
Edmonds-Karp动能算法
Edmonds-Karp的思想其实就是基于网络流基本思想的BF算法,即对于含有反向边的残量网络,贪心增广每一条增广路的可改进量,直到残量网络不含增广路。对网络流基本思想不清楚可参见我的另一篇博客《网络流的核心思想》以下是我基于链式前向星存储方式实现的Edmonds-Karp算法。//// Created by Visors on 2020/9/25.//// 题目名:【模板】网络最大流// 题目来源:luogu// 题目链接:https://www.luogu.com.cn/problem/P原创 2020-09-26 16:48:47 · 391 阅读 · 0 评论 -
网络流的核心思想
很久以前学网络流的时候觉得网络流复杂生涩,其实网络流正如其名,是一个非常形象的水流动的模型。理解下面两个概念,并掌握找到、操作他们的方法,网络流的各类算法其实很容易被记忆和实现。原创 2020-09-24 23:26:31 · 419 阅读 · 0 评论 -
一种对 2 的幂巧妙的 Hash 方法
看书时看到一个有趣的事实:∀k∈[0,35]\forall k\in[0,35]∀k∈[0,35], 2kmod 372^k\mod 372kmod37 互不相等,且恰好取遍整数 [1,36][1,36][1,36].原创 2020-08-24 21:59:09 · 220 阅读 · 1 评论 -
DFS/BFS求解树的直径及其无法用于负权图的证明
当我从各种博客中学习这个算法时,并没有看到相关前提的提出以及对本问题如此详尽的分类证明。本着希望读者能和我一样在面对不严谨的网络资源时能严谨的考量其中知识的目的,我写下了这篇博客。原创 2020-08-20 17:32:10 · 895 阅读 · 2 评论