蒟蒻柴犬首相的博客

蒟蒻柴犬首相的博客

Tarjan算法——边双和点双

边双连通分量 边双连通图:如果一个无向连通图中,没有割边,那么这个无向连通图就是一个边双连通图。 一个无向图的极大边双连通子图就是它的其中一个边双连通分量。 我们要解释下这里“极大”的概念:如果一个连通子图G1G1G1是边双,那么不存在一个原图的子图G2G2G2既满足G1∈G2G1∈G2G1...

2018-08-23 08:37:56

阅读数:237

评论数:0

Tarjan算法——割点与割边

tarjan算法中的一些要素 dfn[i]代表时间戳,是访问该节点的时间。 low[i]代表追溯值。是该节点以及它的子树通过非搜索树边能追溯的dfn值最小的祖先的dfn值。 割点 割点的概念就是:在一张无向图中,去掉某一个点,这个图将会分裂成多个连通子图。 我们知道一个点不是割点,当前仅...

2018-08-10 21:20:55

阅读数:74

评论数:0

费用流模板——EK+SPFA实现的最小费用最大流

算法原理 用两个字的高度概括——贪心~ 用一句话的概括:每一次通过spfa找到花费最小的可行流,然后进行增广,直到残量网络中,源点不能达到汇点。 其实还是通过代码理解比较好。 code 这里1是源点,n是汇点。 每次的读入四个数:有向边的两个结点+容量+费用 #include...

2018-07-21 09:54:12

阅读数:92

评论数:0

【网络流24题之一】飞行员配对问题+求方案(匈牙利算法求二分图最大匹配)

题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。...

2018-07-10 21:18:34

阅读数:23

评论数:0

【网络流24题之一】飞行员配对问题+求方案(网络流dinic算法求二分图最大匹配)

题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。...

2018-07-09 21:24:48

阅读数:31

评论数:0

最大流算法之三——Dinic算法的优化——当前弧优化

当前弧优化 我们通过上一篇博客 传送门 知道,每一次bfs之后都跟着若干次dfs。每一次dfs都会发现一条可行流,而且这个可行流肯定是该路径的最大可行流。所以我们对于一条路径进行增广之后,肯定不用进行第二次增广。 所以我们这里加了一个优化,在同一个 bfs分层后跟着的dfs里面,加入要...

2018-07-08 15:19:29

阅读数:54

评论数:0

最大流算法之二——Dinic算法

Dinic是优化的EK Dinic算法的流程是,每次寻找可行流路径的时候都先通过一次bfs给原网络分层(如果不能分层,那么已经是最大流网络了),再通过dfs给分层后的网络找可行流路径(这时候不是仅仅找一条,二十一次dfs可以找许多条可行流)。 (图片来源:https://www.cnblogs...

2018-07-08 14:59:56

阅读数:35

评论数:0

最大流算法之一——EK算法

EK算法流程 EK算法的流程很简单: 随意找一个可行流作为流量网络更新的基础(一般题目没有规定可以采用流量为0的可行流) 利用bfsbfsbfs找一条从源点到汇点的可行流路径 用新找到的可行流路径更新原有流量网络:先找到该可行流路径中流量最小边,然后将该路径上所有正向边都减去该最小边的流量,...

2018-07-07 16:14:00

阅读数:58

评论数:0

bzoj1218 [HNOI2003]激光炸弹

题面 题解 从学考回归oi第二题。。 复习二维前缀和。 #include<bits/stdc++.h> using namespace std; inline int read(){ int num=0;cha...

2018-07-07 10:01:52

阅读数:32

评论数:0

NOIP2000 方格取数(动态规划 详细解答)

这里我们按照一定的流程来做 也就是把思维过程一步步写下来 很多DP题都可以按照这个思维来做 题目描述 设有N∗NN∗NN*N的方格图(N<=9N<=9N000。如下图所示(见样例): A 0 0 0 0 0 0 0 ...

2018-03-24 16:19:40

阅读数:70

评论数:0

树状数组

树状数组 先给一张树状数组的图片吧,有图有真相。 树状数组就长这样↑,因为看上去像一棵树,所以就叫树状数组了。我们用cc数组来存储aa数组的某些内容,从而优化时间复杂度。 如何实现 lowbit 先来了解一个概念lowbitlowbit。从字面意思上理解:就是最低的二进制位。...

2018-01-05 18:27:58

阅读数:115

评论数:0

数论——Baby Step Giant Step大步小步算法

bsgs算法 Baby Step Giant Step算法,简称BSGS算法,也称为大步小步算法. 解决对象 离散对数:当x≡Gk(modm)x≡Gk(modm)x\equiv G^k\pmod m时,logG(x)≡k(modϕ(m))logG(x)≡k(modϕ(m))log_G(x...

2017-12-19 19:42:42

阅读数:525

评论数:0

[模板]堆和优先队列

大根堆priority_queue<int>a; empty( ) //判断一个队列是否为空 pop( ) //删除队顶元素 push( ) //加入一个元素 size( ) //返回优先队列中拥有的元素个数 top( ) //返回优先队...

2017-11-10 10:29:00

阅读数:100

评论数:0

[模板]高精度封装运算

我只是在这备份下……忘记的时候再来看。。#include<bits/stdc++.h> #define maxn 12000 using namespace std; char s1[maxn],s2[maxn]; namespace Bignum { struct bignu...

2017-11-10 09:04:36

阅读数:105

评论数:0

[模板]乘法逆元

费马小定理适用:求某一个数在模意义下的乘法逆元。 如果a、pa、p互质,那么有ap−aa^p-a就是p的倍数,所以有ap≡a(modp)a^p\equiv a(\mod p),ap−1≡1(modp)a^{p-1} \equiv 1 (\mod p)。所以只要打一个快速幂就ok了。 code#...

2017-11-09 20:36:33

阅读数:101

评论数:0

[模板]二叉树后序遍历

已知某二叉树的中序遍历和先序遍历,求该二叉树的后序遍历。#include<bits/stdc++.h> using namespace std; inline int read() { int num=0; bool flag=true; char c; ...

2017-11-09 15:56:40

阅读数:100

评论数:0

[模板]用倍增求LCA问题

定义 code GG 定义LCA,最近公共祖先,是指一棵树上两个节点的深度最大的公共祖先。也可以理解为两个节点之间的路径上深度最小的点。 我们这里用了倍增的方法求了LCA。 我们的基本的思路就是,用dfs遍历求出所有点的深度。father[i][j]数组用来求的是距离节点i,距离2j2^j的祖...

2017-11-04 20:39:08

阅读数:197

评论数:0

树 DFS序 详解[完全版]

本文是博主通过几篇比较好的博文组合而成。下面是几篇博文的原地址: http://cdnnn.07net01.com/2015/08/899785.html http://blog.csdn.net/ccsu_001/article/details/47667587 http://blog.c...

2017-11-02 15:06:43

阅读数:2761

评论数:4

区间DP

区间DP区间dp就是在一系列的区间中搞特一些子dp,昂。 这玩意儿还得用具体的题目来说。 下面展示一些模型。石子合并题目链接:codevs石子合并分析这道题目跟合并果子很像啊!但是这道题目只能合并相邻的两堆石子。怎么合并的总得分最大呢,就要保证每一次合并后,得分都最大。符合最优性原则,可以用我...

2017-10-30 18:15:30

阅读数:116

评论数:0

[模板]KMP算法

KMP算法简介 KMP算法简介 什么是KMP算法??? KMP算法是由分别姓K/M/P的三个人提出来的。这个算法主要应用于字符串之间的匹配用的。有人会说:字符串匹配??string类型不是有个成员函数find呢?咳咳,我先要说明的是,c++std里面自带的库函数肯定都是时间复杂度...

2017-10-13 13:17:20

阅读数:112

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭