【学习笔记】模板综合
有一些还没有写完呢qwq
这里是记录所有学过的模板的(好像还不会背啊)
Floyd
给出一张由 $n$ 个点 $m$ 条边组成的无向图。
求出所有点对 $(i,j)$ 之间的最短路径。
1 | |
缩点
给定一个 $n$ 个点 $m$ 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。
允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。
1 | |
ST 表 & RMQ 问题
给定一个长度为 $N$ 的数列,和 $ M $ 次询问,求出每一次询问的区间内数字的最大值。
1 | |
负环
给定一个 $n$ 个点的有向图,请求出图中是否存在从顶点 $1$ 出发能到达的负环。
负环的定义是:一条边权之和为负数的回路。
输入的第一行是一个整数 $T$,表示测试数据的组数。对于每组数据的格式如下:
第一行有两个整数,分别表示图的点数 $n$ 和接下来给出边信息的条数 $m$。
接下来 $m$ 行,每行三个整数 $u, v, w$。
- 若 $w \geq 0$,则表示存在一条从 $u$ 至 $v$ 边权为 $w$ 的边,还存在一条从 $v$ 至 $u$ 边权为 $w$ 的边。
- 若 $w < 0$,则只表示存在一条从 $u$ 至 $v$ 边权为 $w$ 的边。
1 | |
快速幂
给你三个整数 $a,b,p$,求 $a^b \bmod p$。
1 | |
并查集
第一行包含两个整数 $N,M$ ,表示共有 $N$ 个元素和 $M$ 个操作。
接下来 $M$ 行,每行包含三个整数 $Z_i,X_i,Y_i$ 。
当 $Z_i=1$ 时,将 $X_i$ 与 $Y_i$ 所在的集合合并。
当 $Z_i=2$ 时,输出 $X_i$ 与 $Y_i$ 是否在同一集合内,是的输出 Y ;否则输出 N 。
1 | |
割点
给出一个 $n$ 个点,$m$ 条边的无向图,求图的割点。
1 | |
最小生成树
给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。
prim
1 | |
kruscal
1 | |
单源最短路径
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
1 | |
LCA
给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。
倍增
1 | |
tarjan
1 | |
topo排序
给出一个DAG,从入读为0的点开始,依次删去,求删除的序列
1 | |
线段树
区间修改(加、乘)、区间查询(和)
1 | |
区间修改(加)、区间查询(和)
1 | |
树状数组
单点修改(加),区间查询(和)
1 | |
区间修改(加),单点查询(值)
咕着
字典树
给定 $n$ 个模式串 $s_1, s_2, \dots, s_n$ 和 $q$ 次询问,每次询问给定一个文本串 $t_i$,请回答 $s_1 \sim s_n$ 中有多少个字符串 $s_j$ 满足 $t_i$ 是 $s_j$ 的前缀。
一个字符串 $t$ 是 $s$ 的前缀当且仅当从 $s$ 的末尾删去若干个(可以为 0 个)连续的字符后与 $t$ 相同。
输入的字符串大小敏感。例如,字符串 Fusu 和字符串 fusu 不同。
1 | |
滑动窗口/单调队列
有一个长为 $n$ 的序列 $a$,以及一个大小为 $k$ 的窗口。现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最小值和最大值。
1 | |
强连通分量
给定一张 $n$ 个点 $m$ 条边的有向图,求出其所有的强连通分量。
1 | |
边双连通分量
对于一个 $n$ 个节点 $m$ 条无向边的图,请输出其边双连通分量的个数,并且输出每个边双连通分量。
1 | |
点双连通分量
对于一个 $n$ 个节点 $m$ 条无向边的图,请输出其点双连通分量的个数,并且输出每个点双连通分量。
1 | |
线性筛
如题,给定一个范围 $n$,有 $q$个询问,每次输出第 $k$ 小的素数。
1 | |
KMP
1 | |