- 博客(15)
- 收藏
- 关注
原创 JZOJ 5939. 【NOIP2018模拟10.30】阻击计划
题解:先把会形成偶环的非树边直接去掉。对于形成奇环的非树边,若树上路径有交,则又会形成偶环。于是问题转换为选若干条路径,使他们无交,且权值和最大。注意到度数很小,n也很小,好像可以状压的样子。设fi,Sf_{i,S}fi,S表示以i为根的子树中,S的第j位为0表示第j个子节点的子树中的所有边和父边都没有选,为1表示可能选了。对于一条路径,将询问挂在lca上,在lca处讨论贡献,可能需...
2018-10-30 22:29:08 282
原创 JZOJ 5936. 【NOIP2018模拟10.29】逛公园
题解:从头到尾只会写暴力。首先要想到一个结论:设fi,j,xf_{i,j,x}fi,j,x表示一开始是x,走i到j这一段后的愉悦度。显然有:若x1<=x2,则fi,j,x1&lt;=fi,j,x2f_{i,j,x1}&lt;=f_{i,j,x2}fi,j,x1<=fi,j,x2还有fi,j,x=min(si,j,fi,j,∞)f_{i,j,x}=min...
2018-10-29 21:24:01 315
原创 JZOJ 3260【GDOI模拟】Rotate(字符串最小同构)
题解:第一个问题是如何求出一个字符串最小同构。高级算法:把字符串copy一遍接到后边。如果用倍增法求SA,复杂度O(n&nbsp;logn)O(n~logn)O(n&nbsp;logn)如果用DC3求SA,复杂度O(n)O(n)O(n),但是常数巨大。如果用SAM,时间复杂度O(n)O(n)O(n),空间复杂度O(n∗∣str∣)O(n*|str|)O(n∗∣str∣),显然不能接受。...
2018-10-29 17:15:41 200
原创 JZOJ 5929. 【NOIP2018模拟10.26】情书(n的排列LIS期望长度)
题目大意:求长度n的排列的LIS的期望长度。1<=n<=29题答。题解:以前有个经典的做法,就是dp套dp。考虑正常做LIS是怎么做的,有一个辅助数组l[i]表示长度为i的上升子序列的结尾最小是多少。那么很容易想到设fi,jf_{i,j}fi,j表示确定了排列的前i个,S是一个压缩状态,对于每一个数,0表示没有出现过,1表示出现了,但是不在l里,2表示出现了,且在l中。...
2018-10-26 22:48:09 626
原创 【GDOI2016模拟3.14】hashit
CLJ的题,本来是道后缀平衡树的裸题,先用广义后缀自动机艹过去,之后再补。题目大意:有一个字符串,每次要支持后端插入和后端删除,问操作完后该串不同子串的个数。题解:首先搞成一个trie,然后建广义SAM。然后考虑利用SAM去求不同子串个数。我们知道对于两个trie的两个前缀,它们的lcs就等于它们两个点在SAM上的结尾点在SAM上的lca的深度。因此可以自上而下扫trie,现在相当于...
2018-10-24 22:16:18 254
原创 bzoj2555: SubString
传送门.算是一下复习了两个算法。题解:建出后缀自动机,然后相当于有删边,有加边,动态维护一个点的子树里有多少个结尾的点。可以直接用lct维护子树和,或者ett维护。注意一棵有根树,其实只用lct维护路径和应该是最简单的。Code:#include<cstdio>#include<cstring>#include<algorithm>#defi...
2018-10-21 11:48:17 233
原创 替罪羊树学习小记
替罪羊树是一种没有旋转操作的二叉搜索树。或者说就是一颗二叉搜索树,暴力的那种。插入就是自上而下找到应该插入的地方而后插进去。我们知道这样搞肯定是可以变成O(n)O(n)O(n)的深度其复杂度的保证依赖于重构。即一棵子树不平衡直接提出来重构成完全二叉树。不平衡的定义为:max(siz[x0],siz[x1])&amp;gt;siz[x]∗αmax(siz[x0],siz[x1])&am...
2018-10-21 08:45:31 281
原创 Codeforces 983E NN country
传送门先考虑树是一条链怎么做?最最最最经典的做法就是倍增。设fi,xf_{i,x}fi,x表示从x出发,用2^i的条路径,最远能够走到哪里。首先预处理f0,xf_{0,x}f0,x,这个相当于把一段区间的f取max。假设有一路径[x…y],那么要对[x…y]的f取max(fi,y)max(f_i,y)max(fi,y),但是由于fif_{i}fi的初值为i,所以也可以说是对[x…...
2018-10-20 16:36:44 440
原创 K-D tree学习小记(贴模板的)
K-D tree是一棵平衡二叉树。K_D即K-Dimention,k维的意思。可能维护什么k维偏序。建树:建树的过程中每次会把一堆点按照某一维切半,中间的提出来作根,分成两个部分作为左右子树继续建树。一个比较劣的维度选法是循环选取,雨露均沾。也可以随机钦点。正统的K-D tree是选方差最大的那一维。复杂度:O(k&nbsp;n&nbsp;log&nbsp;n)O(k~n~log~...
2018-10-18 16:19:25 248
原创 bzoj 3489: A simple rmq problem
传送门.题解:本来应该用数据结构大力解决这题,无非就是对于每一个点求一个next、last分别表示上一个和下一个和它相同的,然后变成了三维偏序问题。然后随便想了个分块,考虑不仅对序列分块,还对值域分块。设si,j,ks_{i,j,k}si,j,k表示序列中的第i块到第j块在值域第k块的出现次数为1的个数。再维护个前缀和pi,jp_{i,j}pi,j表示序列前i块在j的个数。然后就可...
2018-10-17 14:48:32 238
原创 无旋treap学习小记
高一才学这么基本的平衡树,退役了~鉴于旋转treap不能可持久化,与splay相比除了常数小以外没有什么不同,所以就不学了。treap:treap = tree + heap,即二叉搜索树+堆它的中序遍历是有序的,这是二叉搜索树的性质。且对于每一个点有一个随机的键值,对于整个树的任意一棵子树,键值满足堆的性质。基于随机,树高期望是log的。非持久化无旋treap:核心操作有两个:...
2018-10-17 08:49:55 389
原创 洛谷P3345 [ZJOI2015]幻想乡战略游戏
传送门题解:先考虑一个简单的问题:怎么在有修改的情况下快速求一个点作为补给站的答案。注意到和路径有关,所以很容易想到点分树。接着可以想到一个十分暴力的做法,就是修改后,每次枚举相邻的点,如果更优就走过去。很容易想到因为每次重心不会移动太远,这个是可以过的,数据也不太好造来卡这个做法。那么有没有稳定的做法?还是每次枚举子树,假设现在在点x,枚举的子树是y,发现y的答案比x优,那么就走到...
2018-10-16 16:42:00 215
原创 OI中用priority_queue替代set的一些小trick
set由于其功能强大,令人爱不释手。但是换来的是令人作呕的常数。其实在一些简单的操作中,set是可以用priority_queue来替代的,后者常数小,代码相对来说也要简洁一些。堆优化dij的priority_queue写法:*SPFA已死,有事烧纸正常的堆写法是需要删除的,显然set是可以做到这一点的,需要用pair,很烦。问题1:c++优先队列默认是大顶堆,我们需要取出的是距离最...
2018-10-12 21:34:32 543
原创 OI中时间函数实战用法
1.用作时间函数随机种子。srand(time(0));2.暴力卡时:在求最优解的题中有奇效。用法:clock()函数,返回值为一个整数,一般电脑的单位是ms,不同电脑可能不同。这没有关系,CLOCKS_PER_SEC是一个定值,就是clock()一秒的数值是多少。int st = clock();//...printf("%lf\n", (double) (clock() -...
2018-10-11 21:08:21 770
原创 生成树计数——矩阵树定理学习小记
此篇博客没有证明(我太菜了),只有结论。要证明见栋栋的博客 。生成树计数,顾名思义,就是求生成树的方案数。基尔霍夫矩阵:定义度数矩阵D,Di,i=点i的度D_{i,i}=点i的度Di,i=点i的度数再定义邻接矩阵C,Ci,j=[i、j之间有边]C_{i,j}=[i、j之间有边]Ci,j=[i、j之间有边]基尔霍夫矩阵=D−C基尔霍夫矩阵=D-C基尔霍夫矩阵=D−C行列式:对于一...
2018-10-09 21:21:16 446
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人