算法
文章平均质量分 72
fearlessxjdx
这个作者很懒,什么都没留下…
展开
-
树的直径
树的直径树上最长的简单路径即为树的直径。求树的直径的方法就是在树上任选一点u,求距离点u最远的点y,再求距离点y最远的点s,点y到点s的距离即为树的直径。(即两遍DFS或BFS求最远点)证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于BFS找到了v矛盾) 2) 如...转载 2018-09-17 15:21:34 · 138 阅读 · 0 评论 -
欧拉回路和欧拉道路
即一笔画问题。起点和终点相同称为回路,否则称为道路欧拉回路或道路存在判定无向图联通,有0个或2个奇点(度为奇数)。如果有两个奇点,则必须从一个奇点出发,另一个奇点终止。如果奇点不存在,则可以从任意点出发,最终一定会回到该点。有向图最多只能有两个点的入度不等于出度,而且必须是其中一个点的出度恰好比入度大1(把它作为起点),另一个点的入度比出度大1(把它作为终点)。当然,还有一个前提条件...原创 2018-10-02 10:23:58 · 347 阅读 · 0 评论 -
倍增法求LCA
#include <bits/stdc++.h>#define rep(i,a,b) for(int i = a; i <= b; ++i)#define per(i,a,b) for(int i = a; i >= b; --i)#define WTS(x) cerr <&l原创 2018-10-02 15:53:10 · 137 阅读 · 0 评论 -
树链剖分详解
转载请注明出处,部分内容引自banananana大神的博客树链剖分就是将树分割成多条链,然后利用数据结构(线段树、树状数组等)来维护这些链。前置知识: dfs序 LCA 线段树先来回顾两个问题:1,将树从x到y结点最短路径上所有节点的值都加上z这也是个模板题了吧我们很容易想到,树上差分可以以O(n+m)的优秀复杂度解决这个问题2,求树从x到y结点最短路径上所有节点的值之和lca...转载 2018-10-02 17:13:00 · 359 阅读 · 0 评论 -
浅谈基础根号算法——分块
https://www.luogu.org/blog/48265/qian-tan-ji-chu-gen-hao-suan-fa-fen-kuai链接:https://pan.baidu.com/s/1JoAVS69KMXAJkUY65as4kQ 密码:128k转载 2018-10-04 19:43:13 · 596 阅读 · 0 评论 -
字符串哈希
下面介绍的字符串Hash函数把一个任意长度的字符串映射成一个非负整数,并且其冲突概率几乎为零。取一固定值P,把字符串看作P进制数,并分配一个大于0的数值,代表每种字符。 一般来说,我们分配的数值都远小于P。例如,对于小写字母构成的字符串,可以令a=1,b=2,...,z=26。a=1,b=2,...,z=26。a=1,b=2,...,z=26。 取一固定值M,求出该P进制数对M的余数,作为该字符...转载 2018-11-05 18:12:37 · 3511 阅读 · 0 评论 -
KMP模式匹配
KMP算法,能够在线性时间内判定字符串A[1~N]是否为字符串B[1~M]的子串,并求出A在B中各次出现位置。首先最朴实的做法是O(NM)的,其次这个问题使用字符串Hash也能在线性时间内求解。KMP算法能更高效、准确地处理这个问题,并提供一些额外的信息。详细的讲,KMP算法分为两步:(为方便讨论,以下部分将字符串存储在S[1…n],而不是S[0…n-1])对字符串A进行自我匹配,求出ne...转载 2018-11-08 19:33:22 · 211 阅读 · 0 评论