05 2022 档案
摘要:矩形chkmax,单点求值 先考虑一个简单的情况,矩形为3-side矩形,假设这些矩形都贴着右边界,那么我们可以从左往右扫描线,每遇到一个矩形的左边界,就在线段树上区间chkmax,扫到对应的单点时,就进行查询。用一个标记永久化的线段树+扫描线很容易维护。 考虑4-side 矩形的情况,发现我们很难
阅读全文
摘要:分块求最优块长时,往往可以通过令两项相等得到,原因是其中一项复杂度单增,另一项单减,而复杂度取决于较大者,所以令两者相等。 log(块长)通常为了方便计算可以看成log(N),当块长为时,两者差一个2倍常数。 莫队复杂度精确来讲为$O(n\sqrt{m})*O(修改)+O(m)*
阅读全文
摘要:##【题解】【P3538 [POI2012]OKR-A Horrible Poem】 ###Analysis 首先循环节和border一一对应,所以判断某个长度x是否为循环节,可以直接判断len-x是否是border,判断方法有两种,hash或者后缀数组都可以。 因此有一种做法:从小到大枚举询问子串
阅读全文
摘要:###分析 首先可以采用dfs的方式,对每个点遍历一遍,若其尚未访问,则以它为起点dfs,那么此次dfs中未遍历到的点一定不可能与遍历到的点形成强连通分量,因为强连通分量要求能够互相到达。 在一次dfs中,每个scc一定存在一个节点是这个scc中其他所有点的祖先节点。证明:否则,这个scc可以划分为
阅读全文
摘要:###Analysis 无向图有源汇最小割的模板题,无向图和有向图的最小割其实没有区别,把无向图的边看成两条有向边即可。 本题中要割点,只需把点拆成入点和出点,从入点向出点连容量为点权的边,原图中的边(x,y)从x的出点连向y的入点,容量为inf(避免被割) 要求方案,则从起点开始dfs,只经过所有
阅读全文
摘要:###题目 ###Analysis 可以想到把奶牛当做水流,从最初奶牛在的节点,流到他最后停下的节点。 但是时间不容易在图上体现出来,考虑二分这个时间(这是网络流常见套路),然后判定在这个时间内,所有奶牛能否流到汇点。 对于建图,首先是对源点向每个点建一条边,容量为这个点初始的奶牛数,每个点向汇点连
阅读全文
摘要:棋盘选数:可以看做行,列进行二分图匹配。 例题: [SCOI2015]小凸玩矩阵 分配问题,每个点初始有一些物品,通过一些“规则”可以移到别的点上,询问最终每个点的物品数是否满足给定的条件。建模时把物品当做流,把每个点拆成初始点和最终点。有可能询问时间,可以把时间二分,则“规则”可以通过最短路预处理
阅读全文
摘要:###Analysis 自己想了一个与题解都不同的做法。题解主要是两个做法,一个是反悔贪心,一个是dp,都是基于“每个城堡尽量在晚的时候控制”的思路做的。想学点这 我是对士兵进行思考的。 首先发现题目中攻打下一个城市需要的士兵数实际上没有考虑到后面的影响,我们很容易可以倒着做一遍,将考虑到后面城市影
阅读全文
摘要:##【线段树优化建图】【P5029 T'ill It's Over】 ###P5029 T'ill It's Over ###Analysis 每次将一个区间一块进行连边,可以用线段树优化,减少连边数。 具体在线段树每个节点维护一个编号,这个编号用一个tot来分配,在build时,每新建一个节点,t
阅读全文
摘要:time,end不能在程序中使用,end是在linux系统下不可使用,但是写在结构体里两者就无所谓了。y0不能和万能头连用(但是好像只要不定义全局就行),最好不要写这些 一些未定义行为在不开O2时不会表现出来,开O2后就会RE,如数组越界,函数没有返回值。
阅读全文
摘要:###Analysis 首先很容易想到二分油箱大小,对每辆车O(n)贪心判断是否合法,复杂度是O(nmlogw)的,经过一些优化是可以通过的。 但这里要说一下dp解法。对于每辆车实际上我们要求从s到t分成r+1段,每一段的最大值最小是多少。这时可以用区间dp做的。 设f[i][j][k]表示从i到j
阅读全文
摘要:###Analysis 显然用线段树来维护。考虑快速求出左右端点分居左右区间的方案数。 首先按位或和是满足单调性的,按位或的数越多,和越大,那么从左到右枚举右端点,左端点的可行范围一定是从左区间的左端点到左区间的某个位置,且这个位置是递增的。 那么我们就有了单次pushup复杂度为O(区间长度)的做
阅读全文
摘要:###Analysis 不难想到设f[p][0/1/2]表示走到标号为p的格子,目前是车/马/象的最短时间。那么转移时,需要知道从一个格子的某个状态走向另一个格子的某个状态的最短时间。 即f[p][q]=min f[p-1][y]+d[p-1,y][p,q] 那么将p,q可以压成一个状态,将同一个格
阅读全文
摘要:###Analysis 首先想到对每个数计算有多少种子序列使得最终集合包含这个数,用方案数乘上这个数再累加求和即可。 所以设f[i][j]表示前i个位置,目前有j个小于等于a[p]的数的方案数, i<p f[0][0]=1; (1) a[i]=='-' f[i][j]=f[i-1][j]+f[i-1
阅读全文
摘要:好坑的一道题。。。 ###Solution 首先很容易联想到完全背包计算方案数,考虑如何维护严格大于的限制。 把限制看作一条有向边,题目保证每个点入度,出度均不超过1,则最终的图一定是若干个链或环。若存在环一定无解。 那么对于每条链分别考虑,每条链中最小的点最少选0个,第二小的最少选1个,···第i
阅读全文
摘要:我已经菜得连绿题都不会了。。。 ###Solution 首先要注意矩阵中有可能是0,因此要特判是否有0,最后跟不经过0的最优解进行比较。 要使尾0最少,发现只有质因子2和5的个数有贡献,因此可以设f[i][j][k]表示从(1,1)到(i,j)在有k个质因子2的情况下(若5的质因子多于2,则令k为负
阅读全文
摘要:#【插头DP】【学习笔记】 ###Tips: 虽然插头Dp模板是黑的,但其实算法并不难理解,用到的只是轮廓线dp+哈希表而已,比较复杂的是讨论多种情况的转移和位运算,但封装几个函数以后,代码也十分简单了。 模板 ###Solution 首先考虑状压dp,考虑需要哪些状态,如果仅仅知道每个格子是否有向
阅读全文