- 博客(27)
- 收藏
- 关注
转载 Splay Tree
\(Splay Tree\) \(Splay\)是一种非常诡异的数据结构 核心:二叉搜索树 优化:复杂度均摊\(O(nlog n)\) 优化操作:Splay操作 在刚学\(Splay\)时不建议看它的势能分析,因为并没有什么卵用 引入 二叉搜索树(\(BST,Binary Search Tree\)): 核心性质:左儿子小于自己,右儿子大于自己的一棵二叉树 缺陷:对于不同序列树高会呈现$...
2019-09-26 10:55:00
199
转载 AC自动机总结
AC自动机总结 AC自动机简述 功能 多模板串对单个或多个串的匹配问题 主体思想 原理同\(kmp\) , 在\(trie\)树上使用变种的\(kmp\) 实现 需要数组 : \(trie[N][26],fail[N]\) \(fail\)即我们所说的失配函数,\(trie[]\)则略有变更 准确一点得说,\(fail\)函数是不需要知道后继字母的失配 而\(trie\)树上的节点经过处...
2019-09-16 21:53:00
246
转载 树形dp专题总结
树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题(T12) 5.dp题最基本的考察是对题意模型的转化,以应用在各个方面 6.前缀和等技巧优化dp 7.树形背包是n*n的! T1 BZOJ1304 [CQOI2009]叶子的染色 首先是对于固...
2019-09-08 13:32:00
380
转载 大力线段树
Skills For A Better Segment Tree Part 1: Faster 1.非递归线段树 你可以不用zkw,只用每次单点操作时直接像打二分样写下去就好了 以单点求和为例 int Que(int p,int l,int r,int x){ if(l==r) return Sum[p]; int mid=(l+r)>>1; Down...
2019-09-02 15:01:00
163
转载 容斥专题总结
容斥专题总结 A:How many integers can you find 过于水,但是有细节 \[\ \] \[\ \] B: Eddy's爱好 枚举k的值,直接开k次方根,为了防止爆精度,我手写了一下 然后就是对于因数容斥,或者是直接套莫比乌斯系数 const int N=4e5+10; const ll INF=(1ll<<62)-1; ll n; ll qs...
2019-08-24 08:02:00
300
转载 牛客提高组模拟赛4
牛客提高组模拟赛4 T1 麻将 这题应该做法有很多吧,我提供一种奇怪的做法 将每一行连续的1提出来,形成一个个区间\(l,r\) 实际是求对于每一\(1\leq l \leq r \leq m\),能覆盖它的\(l,r\)有多少个 怎么求呢? 首先我们将这些区间存储在每个左端点上 循环枚举左端点,每次将右端点的sum++,维护一个后缀即可,累加得到每个右端点的答案 直接这样做,复杂度应该...
2019-08-22 13:31:00
167
转载 Johnson算法:多源最短路算法
Johnson算法 请不要轻易点击标题 一个可以在有负边的图上使用的多源最短路算法 时间复杂度\(O(n \cdot m \cdot log \ m+n \cdot m)\) 空间复杂度\(O(n+m)\) 这个神奇的算法综合利用了Dijkstra算法和Bellman-Ford算法(不要慌,虽然有负边但Dijkstra可以跑!) 在开始讲解之前,我们将其与floyd进行比较 \(flo...
2019-08-19 18:54:00
471
转载 HDU 6212 Zuma
Zuma 这个题没有素质!它卡常! 我发现网上很多人的题解都写得很奇怪,也不好确定正确性,所以我借这篇题解表达一下愚见 定义$ dp[i][j][0...4]$表示 0:消完了 1:还剩1个0 2:还剩2个0 3:还剩1个1 4:还剩2个1 转移极其繁琐 卡常技巧:相邻相同的可以压成一个块 const int N=410; #define chk(a,b) (a>b&&am...
2019-08-12 12:02:00
182
转载 AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) \[x=i,g(x)=0\] \[x\ne i ,g(x)=1\] 则我们可以构造 \[f(x)=\sum^{i=0}_{P-1}(-a_i*(x-i)^{P-1}+a_i)\] 对于第\...
2019-08-11 08:58:00
158
转载 NOIP 2013货车运输
当然这题有很多做法,但是我看到没有人写DSU的很惊奇 按照之前做连双向边题的经验,这题可以用并查集维护联通 然后对于每个询问\(x,y\),考虑启发式合并 当两个点集\(x,y\)合并时,一些涉及到其中点的询问可以被解决,而遍历\(x,y\)中的询问集其实是等价的,所以可以直接用启发式合并存下这个点集涉及到的询问,在合并时我们要遍历数组,所以可以同时完成对于询问的回答 typedef l...
2019-08-10 17:59:00
162
转载 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp[i][j]\)表示 , 对于当前的一个空栈 , \(i\)到\(j\)这一段都出栈的最小花费 显然是长得一副区间(诡)dp(异)的样子 , 如何转移呢?(建议自己想想吧) 对于一个\(dp...
2019-08-10 12:15:00
246
转载 UOJ14 DZY Loves Graph
UOJ14 DZY Loves Graph 我的解法:启发式并查集+状态建树 观察题目的三种操作 1. Add a b: 表示在 a 与 b 之间连了一条长度为 i 的边(注意, i是操作编号)。保证 1≤a,b≤n。 2.Delete k: 表示删除了当前图中边权最大的k条边。保证 k 一定不会比当前图中边的条数多。 3.Return: 表示撤销第 i−1 次操作。保证第 ...
2019-08-06 13:46:00
170
转载 离线赛游记
纪念当年曾经爆过的细节 1.高精进位爆炸 while(top[x]!=top[y]){ if(dep[x]<dep[y]) swap(x,y);//应该比较dep[top[x]]和dep[top[y]]... res+=Que(L[x])-Que(L[top[x]]-1); x=tf[top[x]]; } 3.贪心没有对拍! 4.树状数组查询时下标溢出...
2019-08-04 16:34:00
115
转载 Xor-matic Number of the Graph-CodeForces - 724G
Xor-matic Number of the Graph-CodeForces - 724G 线性基棒题 建议做这题前先看看线性基的概念,然后A掉这道题--->路径最大异或和 这两个题都用到了一个相同的性质: 任何一条路径的异或值都可以随意地与任意多个环相接 对于这道题来说,每一条路径都有它独立的贡献,并且都需要和每一个异或和不同的环相接 处理环异或和不同自然使用线性基判断插入是...
2019-08-01 21:28:00
226
转载 线性基学习笔记
线性基专题学习 (仅以此篇表愚见) 引入:最大异或和 (笔者希望你在看这个之前学过了高斯消元) 我们先把线性基放到一边,如何用高斯消元解决呢? (下面的陈述可能有些问题,某些细节和实现希望读者自己想一下) ---->从高到低确定每一位是否能选,即设这一位方程的右边为1,解当前的方程组判断是否有解,一共是解60次方程组\(O(n \cdot 60^3)\) ---->优化:保...
2019-07-31 15:37:00
159
转载 状压dp学习笔记
主要原理(常用) 1<<n 用二进制位枚举状态,以达到压缩状态的效果 一个简单的例题 看到\(m\)的范围应该能想到压进1<<10里 唯一的细节:因为这个状态不好排序,所以要分层,最好用滚动 #include<bits/stdc++.h> using namespace std; int n,T,m,x,y,f[2][1100]; int main()...
2019-07-30 13:02:00
114
转载 数位dp技巧
一个奇怪的东西 正反都能dp!: 正常我们数位dp都是从高到低,以这样的方式保证其小于给定数-> ll n; int num[N],l; ll dp[]; ll dfs(int p,int lim){ if(p==0) return 1; if(!lim&&~dp[]) return dp[]; int Uplim=lim?num[p]:9;...
2019-07-30 12:44:00
186
转载 LCA的几种做法
P3379 LCA $ 1:$蜗牛爬式 void dfs(int u,int fa) { f[u]=fa;//预处理father for(int i=head[u]; i; i=e[i].nxt) if(e[i].v!=fa) { int &w=e[i].w,&v=e[i].v; dis[v]=dis[u...
2019-07-28 16:18:00
346
转载 ZOJ 3494 BCD code
BCD code 题解 -> 传送门 ### AC自动机请滚蛋 , 而是真正的字符串\(dp\)+数位\(dp\) 注意到所有的数位\(dp\) , 都是从首位开始加数字的 , 那么在每一次加入过后 , 若这段后缀字符串已经与某个字符串相同 , 这个状态一定不会继续 而它的后缀与某一字符串相同的条件 , 一定是与某个字符串的某一段前缀相同! 所以 , 我们定义某一个字符串的状态为它...
2019-07-28 16:16:00
263
转载 CF715C Digit Tree
\(Dsu\)做法详解 首先 , \(Dsu\)原理应该不必多说 , 即取重儿子 , 将轻儿子合并 统计答案时 , 我们将以 当前所在点\(u\) 为\(LCA\)的点答案进行统计 ### 但是,这题用 \(Dsu\) 做的难点在于储存 , 所以我们重点讲储存 我们先暂且不考虑取模 首先 , 容器是全局的 , 存的值也必然是全局的 然而 , 我们所知的全局的值只有两种路径,即\(u\)到...
2019-07-28 16:14:00
373
转载 线性预处理Mod_Inv
\[ \ \] \[ \ \] ------------ ll Inv[N]={1,1}; for(int i=2;i<N;i++) Inv[i]=(MOD-MOD/i) * Inv[MOD%i] %MOD \[ \ \] \[ \ \] 是不是很妙啊 证明我不会 (但是我会背代码qwq) 我们瞄一眼 \(Mod \ Inv\)的定义 \[ a \cdot p \ \equiv...
2019-07-28 16:09:00
610
转载 Dynamic_Rankings(动态区间第k大)
ZOJ - 2112 \[ \ \] (那些说这道题是树状数组套主席树的人一定对主席树有误解!) 这里我们用树状数组套线段树来解决来写 首先 , 我们需要有n棵线段树(不是\(n^2\)空间,别慌) 我们用这些线段树存储值域$ [l,r] $内数的个数 基于主席树的思想,我们的线段树是要相减的,记录的是前缀 由于要更新前缀,我们必须快速更新,所以采用树状数组来写 事实上,这里线段树的本质...
2019-07-28 16:07:00
212
转载 主席树学习专题
Count On A Tree 建立线段树记录每个\([1,u]\)路径上的前缀中在值域\([L,R]\)中的个数 查询时 计算 \(cnt[x]+cnt[y]-cnt[lca]-cnt[fa[lca]]\) const int N=1e5+10,P=1e9+7; int n,m; int s[N*20],ls[N*20],rs[N*20],T[N]; int cnt; struct...
2019-07-28 16:06:00
136
转载 Trie学习笔记
Trie(字典树) 基本数据结构 实际是:对于每个字符串组的每一个不同前缀建立节点 基本代码 void Insert(char *s,int p){ int now=0; int l=strlen(s); rep(i,0,l-1){ int k=s[i]-'a'; if(!nxt[now][k]) nxt[now][k]=++ncn...
2019-07-28 16:00:00
169
转载 斜率优化学习笔记
题解并不是特别详细 , 代码可能会有细节问题 ,题目排列比较诡异 方法总结: 一、列出暴力dp的式子 用\(dp[i]=dp[j]....\) 二、找出里面的量,通常分三种: 1只与\(i\)有关 2.只与\(j\)有关的 3.对于同时与\(i,j\)有关的 三、固定 \(i\) ,对于\(x,y\)属于\(j\)的范围且 \(y \leq x\) ,设\(x\)比\(y\)更优,列出不...
2019-07-28 14:04:00
526
转载 5098: [BZOJ1098][POI2007]办公楼biu
5098: [BZOJ1098][POI2007]办公楼biu 没有数据结构就很棒 一个看上去非常玄学的代码 const int N=1e5+10,M=2e6+10; int n,m; int fa[N]; int Find(int x){ return fa[x]==x?x:fa[x]=Find(fa[x]); } vector <int> G[N]; type...
2019-07-28 13:58:00
122
转载 [POI2008]PER-Permutation
[POI2008]PER-Permutation 带重复的康托展开! 根本不需要中国剩余定理就可以A掉! 看完题面你会惊人地发现这好像一个康托展开!(显然是不同的啦) 首先我们来看康托展开这个东西在数组为排列时怎么打 ------->度娘 int cantor(int a[],int n){//cantor展开,n表示是n位的全排列,a[]表示全排列的数(用数组表示) in...
2019-07-28 13:57:00
245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅