模板
夕林山寸
这个作者很懒,什么都没留下…
展开
-
P3808 【模板】AC自动机(简单版)
给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。注意:是出现过,就是出现多次只算一次。AC自动机步骤:1:处理所有模式串,建立trie树:2:处理fail[i]数组:(最长的(当前字符串的后缀))在Trie上可以查找到)的末尾编号。显然fail[i]的深度一定小于i,所以可以BFS递推fail数组。而根据fail数组的定义,对于一个点u,他的fail数组求出过了,对于他的儿子v节点(是u指向i字符的儿子),若v存在,则v的fail为:tr[fail[u]][i]若v原创 2020-08-29 16:24:40 · 187 阅读 · 0 评论 -
[模板] scc/强连通分量
类比无向图连通分量。low[x],dfn[x]#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);const int M = 1e5+7;const int N = 1e5+7;int head[N],原创 2020-07-08 16:22:28 · 217 阅读 · 0 评论 -
树上差分:边差分与点差分
1.边差分:一棵树,让x->y路径上的边权都加上w: d[x]+=w,d[y]+=w,d[lca(x,y)]-=2*w;最后求出F[i]:以i为子树,d的权值和。即i -> fa[i] 的边权。如下图:让6 -> 5 路径上的边权全部加1.d[2]=-2,d[6]=d[5]=1.其余为0然后F的值为:F[6]=F[3]=F[5]=1. 表示6 -> fa[6] 的边权为1,3 -> fa[3] 的边权为1,5 -> fa[5] 的边权为1,原创 2020-05-26 21:46:51 · 460 阅读 · 0 评论 -
倍增求LCA [HDU-2586] 模板 手敲更新
第三次敲这道题,这次直接手敲搞定。码力提升了不少#include <cstdio>#include<iostream>#include<algorithm>#include<queue>#include<cstring>using namespace std;typedef long long ll;const int M = 1e5+7;int head[M],cnt;void init(){cnt=0,memset(h原创 2020-05-25 23:06:10 · 143 阅读 · 0 评论 -
最优比率生成树模板
https://blog.csdn.net/bjfu170203101/article/details/105603013分析类似于我之前写的博客。只是加入Kruskal的算法思想#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double P原创 2020-05-20 21:57:37 · 201 阅读 · 0 评论 -
P3386 【模板】二分图最大匹配 匈牙利算法模板
算法步骤:1.把所有点设为非匹配点,S=空集,所有边都是非匹配边。2.寻找增广路,把路径上所有边状态取反,得到更大匹配Si。3,重复2步,直到不存在增广路。增广路即:从非匹配点开始,到非匹配点结束,中间经过的边满足:非匹配边和匹配边交替。找增广路过程:枚举左部点x,枚举其连接的右部点y,若y为匹配,由于x为匹配,则构成了长度为1的增广路。若y匹配,则枚举y连接的所有左部...原创 2020-05-05 21:12:37 · 197 阅读 · 0 评论 -
POJ - 2104 更新自己的主席树板子
最近学习了橘子猫的线段树写法 很简练,学习一波重新学习一下主席树,不只局限于板子题。主席树空间大小:nlogN,n是数字个数N是数字大小上限一般N是1e5 取17,N是1e6取 20N是1e7取24看情况取吧//#include <bits/stdc++.h>#include<cstdio>#include<algo...原创 2019-08-16 20:01:25 · 93 阅读 · 0 评论 -
对拍程序
今天学了下对拍 放在这放丢失下面是随机数据的模板//KX#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef double db;const int M= 3e5+7;const int N= 1e9+7;int random(int n){ return (lon...原创 2019-08-24 22:56:41 · 121 阅读 · 0 评论 -
普通平衡树 HYSBZ - 3224 ---权值线段树写法
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数)Input第一行为n,表示操作的个数,下面n行每行有两个数opt和...原创 2019-04-30 22:36:12 · 218 阅读 · 0 评论 -
4301 Can you answer on these queries III 0x40「数据结构进阶」例题 区间查询单点更新 最大子段和
描述给定长度为N的数列A,以及M条指令 (N≤500000, M≤100000),每条指令可能是以下两种之一:“2x y”,把 A[x] 改成 y。“1x y”,查询区间 [x,y] 中的最大连续子段和,即 max(x≤l≤r≤y) { ∑(i=l~r) A[i] }。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数N,M第二行N个整数Ai接下来M行每行3...原创 2019-04-24 01:21:48 · 169 阅读 · 0 评论 -
POJ - 3468 树状数组 区间查询区间更新 模板
You haveNintegers,A1,A2, ... ,AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the ...原创 2019-04-16 11:06:26 · 183 阅读 · 0 评论 -
最短路学习
为了天梯赛系统性的学习最短路,主要是为了手敲出来。最朴素的dijkstra就是n^2的,1.初始化d数组无穷大,2.每次找到距离起点最小且没有访问过的点,3.然后用这个点对每个点进行遍历,如果起点最直接到某个点的距离d[i]<起点经过这个点的距离d[x]+a[x][y],就更新4.重复2,3直到每个点都访问过。复杂度O(n^2)#include<b...原创 2019-03-25 14:55:55 · 129 阅读 · 0 评论 -
RMQ模板
#include<bits/stdc++.h>using namespace std;#define maxn 100000+100int dp[maxn][70];int a[maxn];void RMQ(int n){ for(int i=1;i<=n;i++) dp[i][0]=a[i]; for(int j=1;(1<<j)<=n;...原创 2019-03-01 23:07:10 · 204 阅读 · 0 评论 -
线段树模板POJ3468
/*区间更新 求区间和 *///#include<bits/stdc++.h>#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>typedef long long ll;using namespace std;#define...原创 2019-03-01 23:07:18 · 98 阅读 · 0 评论