
template
consult_
这个作者很懒,什么都没留下…
展开
-
字典树 (The 2019 ICPC Shanghai)
B Prefix Code传送门字典树:#include<bits/stdc++.h>using namespace std; const int N = 1e5+7; // 树节点个数 int tree[N][11],cnt;bool vis[N]; bool add( char *s ){ int len=strlen(s) , now=0; ...原创 2020-02-19 17:24:55 · 170 阅读 · 0 评论 -
P3178 [HAOI2015]树上操作 (树链剖分板子)
P3178 [HAOI2015]树上操作 题目描述: 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 树链剖分 模板来源 :https://www.bilibili.com/video/BV1xE411j7WF?from=search&seid=7017680147370733原创 2020-09-30 20:54:15 · 254 阅读 · 0 评论 -
D. Prefix-Suffix Palindrome (Manacher)
D1. Prefix-Suffix Palindrome (Easy version)题意: 给一个字符串 s,求一个字符串 t,t 由 s 的某个前缀以及某个后缀拼接而成,且 t 是回文串,长度不能超过 s。输出最长的 t思路: 可以证明 :当 s=“abcxxcbawuvcba”s=“abcxxcbawuvcba”s=“abcxxcbawuvcba”,最终答案一定包含首部的 abcabcabc 以及尾部的 cbacbacba 两部分。因为此时的最大回文串有两种选法:1、全选前缀abcxxcbaabc原创 2020-07-31 20:41:05 · 270 阅读 · 0 评论 -
Minimum Transport Cost (floyd)
Minimum Transport Cost 题意:给出一张图的邻接矩阵,k个询问,每次输出 x 到 y 的最短路径的长度,和字典序最小的路径。经典套路:path[i][j]path[i][j]path[i][j] 存从 iii 到 jjj 的最短路中要经过的第一个点(iii除外)。具体见注释。#include<iostream>#include<algorithm> #include<cmath>#include<cstring>#includ原创 2020-07-27 14:43:05 · 194 阅读 · 0 评论 -
最小生成树 (kruskal + prim)
kruskal复杂度 O(mlogm) (m为边数,适用于稀疏图)总体思想是把边以 边权从小到大排序 ,再依次加入到集合中;#include<bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e5+7;struct node{ int a,b,w;}edge[N...原创 2020-04-24 15:25:07 · 153 阅读 · 0 评论 -
哈希
模板题一般hash根据映射时对冲突的不同处理方式分为两种方法:开放寻址法 (常用) :Code:#include<iostream>#include<cstring>using namespace std;const int N = 200003; //数据个数的2~3倍后最近的一个素数,尽量避免冲突 const int null = 0x3f3f3f3...原创 2020-04-15 18:56:11 · 125 阅读 · 0 评论 -
滑动窗口 (单调队列 ) (单调栈)
滑动窗口题目描述:给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位。你的任务是找出窗体在各个位置时窗内元素的最大值和最小值。备注: 对于100%的数据,K ≤ N ≤ 10^6思路: 这是很经典的板子题, 显然线段树维护一下最大最小值可以解,虽然复杂度够了,但是内存不够,只能过70%,所以在此我们用单调队列解;当然还有其他的算法(...原创 2020-03-30 20:57:15 · 712 阅读 · 0 评论 -
天才的记忆 (ST表)
模板题 ST表 使用了 动态规划 和 倍增 的思想对区间预处理,可以O(1) 解决区间最值查询问题,又称 RMQ,缺点是不支持像线段树那样的点的修改。f[ i ][ j ] : 代表以 i 为起点,长度为 2^j 的区间的最值转移方程 : f[ i ][ j ] = max( f[ i ][ j - 1] , f[ i + (1<< (j-1) ) ] [j - 1]) ;#...原创 2020-04-01 19:30:07 · 236 阅读 · 0 评论 -
单源最短路 bellman_ford()
有边数限制的最短路题目描述: 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过 k 条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能 存在负权回路 。模板理解: 此算法主要针对有边数限制的最短路,由于两点之间有边数限制,所以干脆就迭代k次,每次循环 m 条边,即使有负环存在,也最多迭代k...原创 2020-03-27 21:40:31 · 177 阅读 · 0 评论 -
多源最短路径 Floyd
Floyd求最短路题目描述: 给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,输出“impossible”。数据保证图中不存在负权回路。模板理解: 在没有负环的图里,求多源最短路,此算法本质上是DP的思想。注意在判断两点之间是否有最短路时,虽然两点之间距离初始化为INF ...原创 2020-03-27 20:30:15 · 286 阅读 · 0 评论 -
单源最短路径 spfa
1、 spfa求最短路题目描述: 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。题解: 正如题目描述,spfa算法适用于大部分图的单源最短路,包括存在负权边时,但是如果存在负权回路,那么求得的最短路就不一定正确了。可以说比Dijsktra用的更多,但因...原创 2020-03-27 19:52:26 · 239 阅读 · 0 评论 -
求组合数(四类)
传送求组合数 I思路: 很明显,a和b 比较小,直接递推即可。公式:C[i][j] = C[i-1][j] +C[i-1][j-1] 。 提供两种理解角度: 1、杨辉三角形(可自行百度)。2、组合公式理解, 从 i 里选 j 个的方案数由两部分,设k是 i 中某一个, 则选取 k 和不选取 k :C[i-1][j] + C[i-1][j-1]#include<bits/stdc...原创 2020-03-21 17:49:15 · 370 阅读 · 0 评论 -
树的重心 (P1395 会议)
P1395 会议思路: 读题后感觉是树的重心,但又不确定,所以查了下重心的性质:定义: 树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得删除这个点后最大连通块(一定是树)的结点数最小,那这个点就是树的重心。重心性质:1、树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。2、把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连...原创 2020-03-25 12:53:44 · 382 阅读 · 1 评论 -
单源最短路径 Dijkstra (堆优化)
P4779 【模板】单源最短路径(标准版) 首先Dijkstra适用于单源最短路径,且没有没有负权边的图。1、当为稠密图时使用邻接矩阵存图,这时的复杂度为O(n^2) ;2、当为稀疏图时使用邻接表存图,且这时配合优先队列(堆)后复杂度为O(n*log n) ;<注意事项>1、堆优化时pair<int,int>,是默认优先以第一个int来排序的,所以记得要把 dis...原创 2020-03-27 16:08:50 · 245 阅读 · 0 评论 -
Trie 详解
Trie字符串统计Trie 又名单词查找树,可根据实际情况,改变第二维的大小。在Trie中,先只考虑第一维,我们使用 idx 给每个串中的字母编号,理解 Trie 的关键在于理解 idx 的作用及其编号过程。编号后所有的串可分为两类:1、串中的字母编号是连续的(从未出现过前缀);2、串中的字母编号分两段连续(比如:第一段是 2~5,第二段是7 ~ 10。意味着2 ~ 5是某个字符串的前缀。)。...原创 2020-03-24 15:00:19 · 213 阅读 · 0 评论 -
离散化(模板题)
802. 区间和 离散化是一种解题思路 , 即把比较大的区间范围内出现过的数(这些数大小相差比较大或者出现的数比较少)映射成小区间范围内的数,说白了就是把离散的一些数集中起来,但维持原来的相对顺序以便进行区间类的处理. (详情看代码注释吧.#include<bits/stdc++.h>using namespace std;typedef pair<int,int&g...原创 2020-03-12 21:58:49 · 414 阅读 · 0 评论 -
STL之bitset<size>
C++ bitset使用指南 介绍:C++语言的一个类库,用来方便地管理一系列的bit位而不用程序员自己来写代码。bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。方便储存bool结果 做数字压缩。(来自百度百科)声明:bitset< size> varm(M)其中varm为变量名。size表示该类型在内存中占的位数,是二进制。M...原创 2020-03-10 15:49:55 · 407 阅读 · 0 评论 -
逆序对的数量 (归并排序)
788. 逆序对的数量 题意描述:解题思路: 根据逆序对的定义知道,其数量可以在归并排序的过程中统计;每次交换时 mid - i + 1 (小于a[j] 的数的区间长度) 的和,即为结果;#include<iostream>using namespace std;const int N = 1e5+7;int a[N],tmp[N];long long ans=0;...原创 2020-02-05 23:08:19 · 397 阅读 · 0 评论 -
一维 二维 前缀和
一维 二维 前缀和一维: 略二维:模板题入口#include<bits/stdc++.h>using namespace std;const int N=1010;int a[N][N],s[N][N];int n,m,k;int main(){ cin>>n>>m>>k; for(int i=1;i<...原创 2020-02-04 22:18:08 · 110 阅读 · 0 评论 -
一维 二维 差分
一维 二维 差分一维:#include<iostream>using namespace std;const int N = 1e5+7;int a[N];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i...原创 2020-02-04 21:51:41 · 234 阅读 · 0 评论 -
高精度(大数计算)
高精度模板#include<iostream>#include<vector>#include<algorithm>using namespace std;// C = A + B; vector<int> add(vector<int> &A, vector<int> &B){ if(A.s...原创 2019-10-26 20:52:44 · 184 阅读 · 0 评论