![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
Apink233
这个作者很懒,什么都没留下…
展开
-
RMQ
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。本文介绍一种比较高效的ST算法解决这个问题。ST(Sparse Table)算法可以在O(nlogn)时间内进行预处理,然后在O(1)时间内回答每个查询。 1)预处理设A[i]...原创 2018-08-11 15:40:18 · 162 阅读 · 0 评论 -
DFS 找环
解释: 找环的过程 就是对其中的每一个点进行一次DFS,DFS的过程就是用一个ans记录成环的个数,到最后肯定是DFS到了这个点周围的一个点,故这个ans是先++的,跳出条件就是判断是这周围的四个点之一,代码如下#include<cstdio>#include<cstring>#include<algorithm>#include<iost...原创 2018-08-30 21:14:40 · 2744 阅读 · 0 评论 -
最小生成树板子
题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz输入输出格式输入格式: 第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi 输出格式: 输出包含一个数,即最小生成树的各边的长度之和;如...原创 2018-09-11 18:46:22 · 354 阅读 · 0 评论 -
线性筛法板子(较快速度)
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int n,m;bool su(int a){ if(a==1) return 0; if(a==2||a==3) return 1; i...原创 2018-09-11 19:47:16 · 339 阅读 · 0 评论 -
有向图最短路径板子(spfa+dijkstra)
题目背景本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。题目描述如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。输入输出格式输入格式: 第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。...原创 2018-09-11 21:13:42 · 548 阅读 · 0 评论 -
静态邻接表
#include <iostream> #include <queue> using namespace std; const long edge_maxn = 1005; //边的最大上限 const long point_maxn = 105; //点的最大上限 struct node {/*node存储边,一个edge代表一条边*/ ...原创 2018-09-11 21:18:10 · 216 阅读 · 0 评论 -
Manacher算法求出其最长回文子串(模板)
给定一个字符串,求出其最长回文子串。例如:s="abcd",最长回文长度为 1; s="ababa",最长回文长度为 5; s="abccb",最长回文长度为 4,即bccb。来源:https://segmentfault.com/a/1190000008484167#include <iostream> #include <cstring>#incl...原创 2018-10-09 22:50:50 · 142 阅读 · 0 评论 -
DFS板子(模板)
#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const int maxn=100;bool vst[maxn][maxn]; // 访问标记int map[maxn][maxn]; // 坐标范围int dir[4][2]= {0,1,0,-1,1,0...原创 2018-10-16 20:51:00 · 705 阅读 · 0 评论 -
全排列 next_permutation() 函数的用法 全排列
#include <stdio.h>#include <algorithm>using namespace std;int main(){ int n; while(scanf("%d",&n)&&n){ int a[1000]; for(int i=0;i<n;i++){ ...原创 2018-10-16 22:27:54 · 201 阅读 · 0 评论