随笔分类 - 题解
题解
摘要:有关or的最大/小值问题,一般都是从大往小贪心,后面的贪心不破坏前面贪心的结果。 对于这题同样从大往小按位考虑,只需要考虑前缀异或和。显然要使这一位为0,每段的末尾的前缀异或和必须均为0,且n的前缀异或和也为0。 如果这位上为0的前缀个数不到m则放弃这一位,否则将所有这一位为1的位置删去。最终结果一
阅读全文
摘要:当最终挂饰集合确定了,一定是先挂挂钩多的在挂挂钩少的。 于是按挂钩从大到小排序,然后就是简单的01背包。
阅读全文
摘要:在虐各种最长公共子串、子序列的题虐的不耐烦了之后,你决定反其道而行之——被它们虐。 操作一:对A,B分别建SAM,暴力BFS。 操作二:对B建序列自动机或SAM,A在上面暴力匹配。 操作三:对A,B建序列自动机,暴力匹配。 操作四:对B建序列自动机,在自动机上DP。 上面的我一句也看不懂,对不起我重
阅读全文
摘要:先发掘性质: 1.xor和gcd均满足交换律与结合率。 2.前缀gcd最多只有O(log)个。 但并没有什么数据结构能同时利用这两个性质,结合Q=10000,考虑分块。 对每块记录这几个信息: 1.块内所有数的gcd与异或和。 2.将块内所有前缀异或和放入一个数组排序。 查询时从前往后遍历每个块:
阅读全文
摘要:看到数据范围就大概只能想到这一种做法了吧。 首先实际上是每个点的权值为v[i]=c[i]+son[i],然后删除一个点就是v[fa[i]]+=v[i]-1。 从下往上贪心删,每次将节点的所有儿子按权值排序,从小到大能删就删,这样一定最优。 感性证明一下“若因为删了某个点而使祖先无法被删去,而删这个点
阅读全文
摘要:求最小权极大线性无关组。 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优。 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于一个线性相关组,没有被选上的一定是最大的那个向量,于是解一定最优。
阅读全文
摘要:两种显然的做法: 1.树上差分+线段树合并。$O(n\log n)$ 2.树链剖分转为序列上差分+线段树。$O(n\log^2 n)$ 后一种的代码:
阅读全文
摘要:这题有多种做法,一种是倍增预处理出每个点往上走2^i步最少需要的初始战斗力,一种是裸的启发式合并带标记splay。 每个点合并能攻占其儿子的所有骑士,删去所有无法攻占这个城市的骑士并记录答案。 注意到splay每次实际上只需要取出最小的元素判断是否牺牲,这显然可以用堆维护。 关于可并堆打标记:和线段
阅读全文
摘要:密室玩小凸。 完全二叉树关于复杂度的两个性质: 1.所有点的深度和为$O(n\log n)$ 2.所有点的子树内的叶子个数和为$O(n\log n)$ 根据这两个性质可以分别解决此题。 下面使用第二个性质,参考:https://www.cnblogs.com/Gloid/p/9874570.html
阅读全文
摘要:请仔细阅读数据范围,c<=7.线段树合并裸题,对于乘积大小比较,使用log即可。
阅读全文
摘要:第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了。 重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献。 设k为总结点数,对于DFS,我们有$T(1)=O(\log k)$,$T(k)=4T(\frac{k}{2})+O(k^
阅读全文
摘要:题目名字是什么就不能往那方面想。 每个点拆成a[i][j]个,问题变为DAG最小路径覆盖,由Dilworth定理转成最长反链。 使用Dilworth定理的时候要注意那些点之间有边,这里任意一个点和其右下方的所有点都有边。 从右上往左下DP统计答案即可。
阅读全文
摘要:题意极其有毒,注意给的行列都是从0开始的。 状压DP,f[i][S]表示第i行状态为S的方案数,枚举上一行的状态转移。$O(n2^{2m})$ 使用矩阵加速,先构造矩阵a[S1][S2]表示上一行为S1是下一行是否能为S2,快速幂加速后得解。$O(2^{3m}m^2+2^{3m}\log n)$
阅读全文
摘要:二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度。 二维Hash:就是一维的等效拓展,注意两维的Base不能相同。 其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很科学。
阅读全文
摘要:求平面上n个点组成的周长最小的三角形。 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案。 这个题也一样,先分治到两边,然后取出所有离mid横坐标不超过当前最小值/2的点,按y排序后选择三个总坐标不超过当前最小值/2
阅读全文
摘要:经典动态二分图问题。 考虑solve(l,r)分治成l,mid和mid+1,r。先将区间[mid+1,r]中的点全部加入图中,若此时存在奇环则ans[l..mid]全部为0,否则递归到左边。 递归完左边后将右边的点全部删去,左边点全部加入,按同样的方法处理右边。 判断奇环使用可撤销带权并查集,注意多
阅读全文
摘要:sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可。
阅读全文
摘要:增强版就是原版中两鬼不算对子的版本。 先爆搜出完所有对子,剩下的牌DP处理。 考虑每个数码的拆牌情况,最多可能被拆成5种情况:1+1+1+1,1+1+2,1+3,2+2,4。故DP状态数最多为5^13≈12e8,事实上远远不满。 而爆搜部分看上去就跑的挺快,具体复杂度玄学。 几个降低代码复杂度的方法
阅读全文
摘要:考虑从起点到终点的过程,一定是先将空格子移到指定格子旁边,和指定格子交换,再移到下一个指定格子要到的地方,再交换,如此反复。 于是问题分为两个部分: 1.给定两个曼哈顿距离为2的格子求最短路,BFS即可。 2.根据1的结果决定从起点到终点的路径,使用SPFA求解。 其中,第一个问题空格子显然不能经过
阅读全文
摘要:模板题。 每个决策点都有一个作用区间,后来的决策点可能会比先前的优。于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间。
阅读全文

浙公网安备 33010602011771号