自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

女装的你,如此好看!

咸鱼翻身,终成大佬。

  • 博客(28)
  • 收藏
  • 关注

原创 [学习笔记]省选数据结构·动态树LCT(补充中……)

一、开头神犇MX:考你一道很水很水的题:一个nnn个节点mmm条边的森林,每个节点有权值。有QQQ个操作,每个操作可以修改一个节点的权值,或者询问森林中两点之间的路径上的点权之和。m<n≤105m<n≤105mQ≤105Q≤105Q\leq 10^5。 xyz32768:树……树……树剖? 神犇MX:哈哈,我忘了说一个条件:每个操作除了上面我说的两个类型之外,还有加边和删边操作...

2017-12-31 13:58:30 506

原创 [BZOJ3142][Hnoi2013]数列(差分+计数)

记aia_i为数列第i+1i+1个数与数列第ii个数之差。这时就能得出aa是一个长度为K−1K-1的数列并且每个数都是一个[1,M][1,M]之间的整数。 而只要给定了这个差分数列和原数列的第11个数,就能确定整个原数列。同时也可以得出,一个差分数列对应了max(N−∑K−1i=1ai,0)\max(N-\sum_{i=1}^{K-1}a_i,0)个原数列。 由于M(K−1)NM(K-1),因

2017-12-30 14:00:58 307

原创 [BZOJ3293][Cqoi2011]分金币(乱搞???)

下面,将「第ii个人给第jj个人kk个金币」定义为: k≥0k\geq 0,则第ii个人的金币数减kk,第jj个人的金币数加kk; 否则第ii个人的金币数加kk,第jj个人的金币数减kk,也就是第jj个人给第ii个人−k-k个金币。 并且第ii个人初始的金币数量为xix_i,平均值为x¯\bar{x},sum[l,r]sum[l,r]为∑ri=la[i]\sum_{i=l}^ra[i]的值。

2017-12-30 14:00:32 301

原创 [学习笔记]DP模型·路径长度之和

一、问题给定一棵nn个节点的无根带权树,要从中选出KK个不同的点A1,A2,...,AKA_1,A_2,...,A_K,最小化∑K−1i=1dist(Ai,Ai+1)\sum_{i=1}^{K-1}dist(A_i,A_{i+1})的值。n≤3000,k≤nn\leq3000,k\leq n。dist(u,v)dist(u,v)为树上uu到vv的距离。二、模型建立可以把问题看作选出KK个不同的点A1

2017-12-30 13:59:11 534

原创 [BZOJ4542][Hnoi2016]大数(莫队+特判)

像这样“子串的子串”“区间内的区间”的问题,线段树这样的数据结构不容易解决。于是想到莫队。 而现在用莫队算法的关键在于移动指针。也就是: 1、求[l,l],[l,l+1],...,[l,r−1],[l,r][l,l],[l,l+1],...,[l,r-1],[l,r]中有多少个子串是PP的倍数。 2、求[l,r],[l+1,r],...,[r−1,r],[r,r][l,r],[l+1,r],

2017-12-16 14:04:16 249

原创 [BZOJ2243][SDOI2011]染色(树剖+线段树)

这道题真的变态。 先树剖。然后在线段树上维护11个标记tagtag,即区间更新的标记。然后在线段树上维护33个值: colcol:对应区间左端点的颜色。 corcor:对应区间右端点的颜色。 TT:对应区间的颜色段数。 合并两个区间,就是将左子区间和右子区间的TT值相加,然后如果左子区间的corcor等于右子区间的colcol,那么这个区间的TT减11。 同样,在路径询问中,将一条路径映

2017-12-16 14:03:45 296

原创 [BZOJ2004][Hnoi2010]Bus 公交线路(状压DP+矩阵乘法)

一、问题分析将问题转化为:一个NN个数的序列,序列的每个位置需要填充一个[1,K][1,K]范围内的数。同时对于任意的1≤i≤K1\leq i\leq K,序列的第ii个位置已经被填充,填充的数为ii。同时[N−K+1,N][N-K+1,N]区间内填充的数必须包含[1,K][1,K]的所有数。而「一辆公交车经过的相邻两个站台间距离不得超过PPkm」这个条件,等价于序列中任意一个长度为PP的一段

2017-12-16 14:02:54 277

原创 [BZOJ3611][Heoi2014]大工程(虚树+树形DP)

看到这样的问题,还是先构建出虚树。以下dep[u]dep[u]为uu在原树中的深度。 对于求最短距离和最长距离,实际上就类似于求最短链和最长链的问题,记一个最小(大)值和一个次小(大)值进行DP求出。 求边权和,记size[u]size[u]为uu的子树内关键点的个数,f[u]f[u]为uu的子树内所有关键点在原树中的深度之和, g[u]=size[u](size[u]−1)2g[u]=\f

2017-12-16 14:02:08 278

原创 [BZOJ2298][HAOI2011]problem a(DP)

这里把第ii个人的名次,定义为分数严格高于第ii个人的人数加11。 把条件进行转化,可以得到「aia_i个人分数比我高,bib_i个人分数比我低」实际上就是「我是第ai+1a_i+1名, 算上我一共有n−ai−bin-a_i-b_i个人和我分数相同」。这里设li=ai+1l_i=a_i+1,ri=n−bir_i=n-b_i。意义是将分数从大到小排序之后,与第ii个人分数相同(包括第ii个人)的区间

2017-12-16 14:01:36 1907

原创 [BZOJ1042][HAOI2008]硬币购物(背包+容斥)

可以想到这是一个背包DP,但是由于数据规模的原因,不能每次都进行一次DP。 于是从「硬币数量只有44」这个条件上入手。由容斥原理得到: 总方案数==不限制的方案数−-有11种硬币超过限制的方案数++有22种硬币超过限制的方案数−-有33种硬币超过限制的方案数+4+4种硬币全部超过限制的方案数 于是可以跑一遍完全背包DP之后,在常数(1616)时间内解决一组询问。#include <cmath>

2017-12-16 14:01:00 195

原创 [BZOJ1026][SCOI2009]windy数(数位DP)

可以想到数位DP。即求[1,B][1,B]内满足条件的个数减去[1,A−1][1,A-1]内满足条件的个数。注意A=1A=1的情况。以下的「第ii位」「前ii位」都是从右往左数起,即从低位往高位数起。 考虑求[1,X][1,X]内满足条件的个数。定义状态f[i][j][0/1]f[i][j][0/1]表示到了第ii位,第ii位为jj,第三维为00表示前ii位小于等于XX的前ii位,否则为11表示前

2017-12-16 14:00:21 227

原创 [BZOJ4475][JSOI2015]子集选取(DP+结论)

把集合看成一个nn位二进制数,第ii位为11表示集合中包含ii,否则第ii位为00表示集合中不包含ii。可以想到,如果把二进制数的每一位拆开考虑,那么变成如下模型: 在一个边长为kk的三角形内,共k(k+1)2\frac{k(k+1)}{2}个位置,对于一个位置(i,j)(i,j),如果(i−1,j)(i-1,j)和(i,j−1)(i,j-1)都填充了11(如果不存在位置(i−1,j)(i-1,j

2017-12-16 13:59:42 551

原创 [BZOJ3669][NOI2014]魔法森林(LCT)

直接求解比较麻烦。考虑先按照AiA_i为关键字将每条边排序,然后按顺序动态加入每一条边。以下定一条路径的代价为一条路径经过的所有边的BB的最大值。可以知道,加入第ii条边之后的最小代价,就是AiA_i加上从11到nn的所有路径中,代价最小的路径的代价。 看到动态加边,可以想到使用LCT来完成。由于要维护边权,所以要把边在LCT中理解成点。 但是现在的一个问题是出现环时应该怎样处理。假设现在要连边

2017-12-16 13:58:29 272

原创 [BZOJ3991][SDOI2015]寻宝游戏(dfs序+set/平衡树)

prufer序列链接:https://www.cnblogs.com/dirge/p/5503289.html 可以发现,这题是一个无根树计数的模型,可以利用prufer序列求解。如果不考虑每一个点的度数限制,那么结果就是nn−2n^{n-2},而根据prufer序列的构造方法能够得到,对于任意一个点ii,ii在prufer序列中的出现次数,等于点ii的度数减11。 这时候,就变成了在n−2n-

2017-12-16 08:06:14 222

原创 [学习笔记]省选算法·莫队

一、开头神犇MX:你是哪里来的弱菜?你是不是上次NOIP爆0的那个大弱鸡xyz32768? xyz32768:我就是那个NOIP2017写炸两题的蒟蒻,的确是大弱鸡。 神犇MX:我还听说你连莫队都不会……你恐怕明年NOIP连400都没有了。 xyz32768:莫……莫队? 神犇MX:就是这样:一个n" role="presentation" style="position: relat

2017-12-06 20:40:03 325

原创 [BZOJ4650][NOI2016]优秀的拆分 各数据点解法

60pts:模拟 O(n4)O(n^4)直接O(n2)O(n^2)枚举每个子串,再O(n)O(n)枚举一个拆分,再进行一次O(n)O(n)判断。总复杂度O(n4)O(n^4)。 此外,注意到前44个数据点的字符串字符全部相同,因此特判一下,此时任意一个长度为偶数的子串的任意一个长度为偶数的拆分都是合法的。70pts:哈希 O(n3)O(n^3)可以发现,判断一个拆分是否合法需要O(n)O(n)的时

2017-12-03 21:26:09 328

原创 [BZOJ4571][SCOI2016]美味(二分+主席树)

可以利用二分的思想,具体步骤,就是从高到低确定每一个二进制位的数值。 可以看出,如果当前已经确定了前几位,那么这个解的范围一定是一个连续的区间。举个例子,假设初始解的枚举范围是[0,262143][0,262143](即1818位二进制数),如果当前已经确定了第18,17,1618,17,16位分别为1,0,11,0,1,那么这时候解的范围就是[163840,196607][163840,1966

2017-12-03 21:25:33 331

原创 [BZOJ2286][SDOI2011]消耗战(虚树+树形DP)

看到题目的条件,容易想到是一道树形DP题,设f[u]f[u]为让uu不能到达uu的子树内(不包括uu)的任意关键点(能源丰富的岛屿)的最小代价。如果uu是叶子节点,那么f[u]=0f[u]=0。 转移就是枚举子节点vv,设val(u,v)val(u,v)为边(u,v)(u,v)的权值,则转移为: 如果vv是关键点,那么f[u]+=val(u,v)f[u]+=val(u,v)。 否则f[u]+=

2017-12-03 21:24:54 327

原创 [BZOJ4002][JLOI2015]有意义的字符串(结论+矩阵乘法)

首先得出,b+d√2\frac{b+\sqrt d}{2}和b−d√2\frac{b-\sqrt d}{2}是一元二次方程x2−bx+b2−d4=0x^2-bx+\frac{b^2-d}{4}=0的两根。 把x2−bx+b2−d4=0x^2-bx+\frac{b^2-d}{4}=0移项得x2=bx+d−b24x^2=bx+\frac{d-b^2}{4}。 两边同乘以xn−2x^{n-2},可以得

2017-12-03 21:24:04 264

原创 [BZOJ3110][ZJOI2013]K大数查询(线段树套线段树)

有很多种解法。这里讲一种线段树套线段树的解法。这里外层的线段树是权值线段树,而内层的是位置线段树(保存对应权值范围的出现次数)。在空间问题上,使用动态开点。 对于修改,可以看作是对于权值cc,位置区间[a,b][a,b]内的所有出现次数加11。也就是说,对于权值线段树从根节点到权值cc代表的叶子节点的路径上的所有点所嵌套的位置线段树,都进行一次区间修改,即区间[a,b][a,b]加11,可以打标记

2017-12-03 21:23:25 295

原创 [BZOJ1068][SCOI2007]压缩(区间DP)

由于每次压缩的都是连续的一段,所以可以想到分段DP,又由于压缩可以嵌套,所以考虑区间DP。为了方便,先假设压缩后的字符串前面自带一个M,统计答案时减11即可。 先想到最经典的模型:f[l][r]f[l][r]表示字符串的第ll个字符到第rr个字符的最短压缩长度。 第11种转移,就是f[l][r]=minr−1i=l(f[l][i]+f[i+1][r])f[l][r]=\min_{i=l}^{r-

2017-12-03 21:22:53 201

原创 [BZOJ4819][SDOI2017]新生舞会(二分答案+费用流)

由于题目求的是最优配对方案,所以很容易想到建一个二分图后用费用流求解,即建立源点和汇点,由源点向每个男生连一条容量为11的边,由每个女生向汇点连一条容量为11的边,再从任意一个男生向任意一个女生连一条容量为11的边。 再考虑费用分配。这时候主要的问题在于C=∑a∑bC=\frac{\sum a}{\sum b}这个式子中∑b\sum b在分母位置,无法简单求和。因此可以利用分数规划的思想去掉分母。

2017-12-03 21:22:09 323

原创 [BZOJ1005][HNOI2008]明明的烦恼(prufer计数+组合数)

prufer序列链接:https://www.cnblogs.com/dirge/p/5503289.html 可以发现,这题是一个无根树计数的模型,可以利用prufer序列求解。如果不考虑每一个点的度数限制,那么结果就是nn−2n^{n-2},而根据prufer序列的构造方法能够得到,对于任意一个点ii,ii在prufer序列中的出现次数,等于点ii的度数减11。 这时候,就变成了在n−2n-

2017-12-03 21:21:28 290

原创 [BZOJ4010][HNOI2015]菜肴制作(拓扑排序+堆)

看到题目,可以想到拓扑排序。但是如果要求字典序最小的排列,那就错了。 可以举出反例:44种菜肴,限制为<2,4><3,1><2,4><3,1>, 那么字典序最小的是2,3,1,42,3,1,4,但题目要求的最优解是3,1,2,43,1,2,4。 继续考虑,可以发现,如果最后一个数字在合法范围内尽可能大,那么这样是绝对有利的。 因为如果设最后一个数字是xx,那么除了xx之外的所有数都不会被放到

2017-12-02 11:53:55 287

原创 [BZOJ3504][CQOI2014]危桥(网络流)

很容易想到建图方案。也就是说,对于图上的任意一条边,如果有普通的桥相连,那么建一条容量为∞\infty的边,否则是危桥,建一条容量为22的边。然后把往返anan次和bnbn次看成走2∗an2*an次和2∗bn2*bn次,由源点向a1a1和b1b1连容量分别为2∗an2*an和2∗bn2*bn的边,再由a2a2和b2b2向汇点连容量分别为2∗an2*an和2∗bn2*bn的边,判断最大流是否等于2(a

2017-12-02 11:52:57 227

原创 [BZOJ1997][HNOI2010]Planar(2-SAT)

首先,平面图的性质:边数小于等于3n−63n-6。不符合的直接跳过。 然后可以发现,对于哈密尔顿环之外的任意一条边,要么连在环内部,要么连在环外部。在一定的条件下(可以简单判断),如果两条边同时连在环内部或同时连在环外部,这两条边就一定会相交,这样的限制条件符合2-SAT的模型。 把第ii条边拆成ii和i′i',ii表示这条边连在内部,i′i'表示连在外部。 对于任意两条不在哈密尔顿环上的边i

2017-12-02 11:52:13 255

原创 [BZOJ1853][SCOI2010]幸运数字(DFS+容斥)

先预处理[1,1010][1,10^{10}]内的所有幸运号码。 对于一个幸运号码XX,在[A,B][A,B]中XX的倍数的个数,就是 ⌊BX⌋−⌈AX⌉+1\lfloor\frac{B}{X}\rfloor-\lceil\frac{A}{X}\rceil+1。 然而,两个幸运号码对应的近似幸运号码可能有交集。考虑到这一点,就可以用容斥,也就是: 选11个幸运号码−-选22个幸运号码的lcm

2017-12-02 11:51:33 217

原创 [BZOJ1296][SCOI2009]粉刷匠(DP)

首先预处理出sum0[i][j]sum0[i][j]和sum1[i][j]sum1[i][j],分别表示第ii行的前jj个格子内00的个数和11的个数。 进行第一次DP,f[i][j][k]f[i][j][k]表示第ii行到了第jj个格子粉刷了kk次,最多能粉刷正确的格子数。注意这里kk的上界是mm而不是TT。 转移就是,如果(i,j)(i,j)被粉刷到,那么就枚举第kk次粉刷的开始位置;如果(

2017-12-02 11:50:21 265

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除