随笔分类 -  总结

摘要:考前写题解增加RP。 D1T1: 考虑按照列DP。对于每一列选择的鱼的区间进行决策。每列中被选择的y坐标最大的鱼,需要被左面或右面覆盖。 假设我们决策好了前i列的方案,考虑第i列被选择的y坐标最大的鱼是否被第i-1列覆盖。 若没有覆盖,需要记录i列中选择的y坐标最大值。此时他需要被第i+1列覆盖,因 阅读全文
posted @ 2022-08-17 21:49 lnzwz 阅读(362) 评论(0) 推荐(1) 编辑
摘要:通常,线段树是一个log的。 但是,有的用于解决特殊问题的线段树,是两个log的。 这个额外的log有两种情况: 第一种就是添加的标记比较特殊,使得pushdown时可能递归。 通过诡异证明,使得均摊复杂度为O(nlog2n)。 第二种就是pushup时,需要递归到其中一个子树,这样每次pus 阅读全文
posted @ 2021-01-24 22:00 lnzwz 阅读(291) 评论(0) 推荐(0) 编辑
摘要:背包问题是一大类问题。 我们不妨设有n个物品,背包容量为m,每个物品大小为c,个数为d,价值为w。 大写字母表示求和。 01背包,完全背包,分组背包:直接dp即可。时间复杂度O(nm)。 多重背包:单调队列优化或二进制拆分。O(nm)O(nmlogd)。枚举余数进行 阅读全文
posted @ 2021-01-11 21:58 lnzwz 阅读(250) 评论(0) 推荐(0) 编辑
摘要:DilWorth定理内容: 对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目。 反过来,对于任意有限偏序集,其最长链中元素的数目必等于其最小反链划分中反链的数目。 例题:给一个序列,每次取走一个最长上升子序列,问至少要几次。 相当于求最小链划分。 那么,求出反图的最长链。 显然, 阅读全文
posted @ 2020-11-15 21:31 lnzwz 阅读(239) 评论(0) 推荐(0) 编辑
摘要:有时,会遇到特殊字符串匹配。 第一种 通配符。 这时通常要用NTT。 记两个字符串的差距为Ai×Bi×(AiBi)2。 若每个位置的差距之和为0,则字符串相等。 若是通配符,把Ai/Bi变为0即可。 把式子拆开后,反转其中一个串,用NTT优化计算。 第 阅读全文
posted @ 2020-10-06 16:53 lnzwz 阅读(315) 评论(0) 推荐(2) 编辑
摘要:循环矩阵,就是循环的矩阵。 循环矩阵有一些性质: 两个循环矩阵,相乘后,仍是循环矩阵。 这样,在进行矩阵乘法时,只维护第一行即可。 复杂度暴力O(n2)。其实是循环卷积,可以用NTT优化至O(nlogn)。 循环矩阵的行列式也可以快速计算。 对于nn的矩阵,设wkn阅读全文
posted @ 2020-10-06 16:34 lnzwz 阅读(650) 评论(0) 推荐(0) 编辑
摘要:有时,会遇到这样的问题:求 i=1nikxi。 其中,k很小,n很大,x可以是数,矩阵,或多项式。 通常,有两种做法: 将x放入矩阵中,并依次把(a+1)i拆开,把系数放入矩阵(其实就是杨辉三角)。 这个方法比较容易,但时间复杂度为O(k3logn)。 使用 阅读全文
posted @ 2020-08-12 22:07 lnzwz 阅读(311) 评论(0) 推荐(1) 编辑
摘要:题意: 给定xd,求x子树里深度不超过dep[x]+d的所有点中有多少种颜色。 强制在线。 一般的,询问区间颜色数时,可以求出每个数的后继,然后就变成了区间内大于某数的数,进而使用树状数组或主席树。 然而,询问树上的颜色数,还有一种更好的方法: 考虑某种颜色的贡献: 把这种颜色的所有点 阅读全文
posted @ 2020-08-04 22:19 lnzwz 阅读(148) 评论(0) 推荐(0) 编辑
摘要:涉及到RMQ,RMQ之和,最大子矩形等,子矩形数量等问题,可以考虑笛卡尔树。 笛卡尔树就是每次找到区间中的最值,按照这个位置将区间分为2份递归建树。 这样,最值就是lca了。 RMQ之和就是lca之和,可以枚举lca算贡献。 最大子矩形等就是每个点的权值乘以它对应的区间长度的最大值。 子矩形数量就是 阅读全文
posted @ 2020-08-04 21:42 lnzwz 阅读(230) 评论(0) 推荐(1) 编辑
摘要:这些方法可以用于最短路,网络流,连通性等问题。 对于区间到区间/点的连边,直接上线段树就行了,这个很简单 对于点到区间/子矩阵的连边(最短路问题),还可以用线段树/KD树维护dis数组,进行区间和某数取min的操作。 P5471 [NOI2019]弹跳 对于序列的某个前/后缀的连边,可以直接把这个序 阅读全文
posted @ 2020-08-04 21:13 lnzwz 阅读(159) 评论(0) 推荐(1) 编辑
摘要:通常,矩阵树定理算出的生成树是边权乘积的和。 如果计算所有生成树边权和的和,比较暴力的方法就是枚举一条边,然后计算包含这条边的生成树个数。 这样的时间复杂度是O(mn3)的,最坏为O(n3)。 考虑优化: 对于一条边权为w的边,将边权设为关于x的多项式1+wx。 这样,容易证出,最后的一 阅读全文
posted @ 2020-06-24 22:54 lnzwz 阅读(792) 评论(0) 推荐(0) 编辑
摘要:通常,构造最小割时,我们对残量网络进行bfs,设能够到达的集合为S,不够到达的集合为T (遍历时考虑反向边),则从S指向T的边被割掉。 但是有时,需要求字典序最小的最小割。 我们可以把所有的边从小到大排序,并遍历。 如果当前边可以删除,那么就删除它,否则继续。 一条边(u,v,w)能被删除有2个 阅读全文
posted @ 2020-05-16 20:20 lnzwz 阅读(271) 评论(0) 推荐(0) 编辑
摘要:[toc] 转对偶图 平面图的最小割对应着对偶图的最短路。 方法: 首先把每条边拆成双向边。 然后,把每个点的所有出边按极角进行排序。 每次:从任意一条未标记的边(u,v)开始,把它标记,并找到v的出边中极角序在(v,u)之后的第一条边。 直到找到一条被标记的边。 这时,我们就找到了一个面。 阅读全文
posted @ 2020-05-02 21:49 lnzwz 阅读(268) 评论(0) 推荐(0) 编辑
摘要:[toc] kd 树是一种分割 k 维数据空间的数据结构。 它通常被用来解决 k 维空间中的距离最值 ( 第 k 小值 ) 问题。 当然,它也能解决其它问题。 建树的方法: 假设我们的平面上的点的序列为 [l,r] 。 我们先选定一个维度为基准,不妨假设是 x 维度。 然后我们找出 [l,r] 这些 阅读全文
posted @ 2020-05-02 21:07 lnzwz 阅读(219) 评论(0) 推荐(0) 编辑
摘要:首先,麻将可以DP。 用DP枚举顺子,因为3个顺子可以变成3个刻子,因此同一位置的顺子数目不会超过2。 这样,在DP时,记录前两个位置选择的顺子个数,即可。状态数为9。 将9个状态的值进行压缩(可以增加顺子和刻子的数量),并记录转移,可以得到麻将自动机。 用这个自动机可以判断是否胡牌等。 在胡牌种类 阅读全文
posted @ 2020-04-06 21:31 lnzwz 阅读(495) 评论(0) 推荐(4) 编辑
摘要:以最小费用最大流为例,我们可以通过退流来消除费用为负数的边。 具体过程: 不妨设有一条从uv的容量为c费用为d的边(d<0)。 先强制满流,把答案加上c×。 之后,从uTSv各连一条容量为c,费用为0的边,用来调整流量。这两条边要使用 阅读全文
posted @ 2020-02-18 20:08 lnzwz 阅读(1481) 评论(0) 推荐(0) 编辑
摘要:回文自动机是接受一个字符串的所有回文子串的自动机。 回文自动机中每个点代表原串的一个回文子串。 维护两种指针:transfail。 点 xtrans[x][c] 指针指向在这个点代表回文串两端同时加字符 c 后得到的回文串。 fail 指针指向 阅读全文
posted @ 2020-02-04 22:02 lnzwz 阅读(505) 评论(0) 推荐(0) 编辑
摘要:做题记录,随时更新 阅读全文
posted @ 2020-01-11 21:38 lnzwz 阅读(697) 评论(0) 推荐(0) 编辑
摘要:有时,我们会遇到这样的问题: 在一个树上选定一些点,每个点能覆盖一定范围的点……之类 比如: CF70E Information Reform P4845 LJJ爱数树 P3267 [JLOI2016/SHOI2016]侦察守卫 Rbtree 通常,我们有两种做法: 方法一 我们对于每个点,考虑距离 阅读全文
posted @ 2020-01-03 20:39 lnzwz 阅读(309) 评论(0) 推荐(0) 编辑
摘要:Dinic #include <stdio.h> #define MN 100010 #define MM 100010 #define inf 99999999 int fr[MN],ne[MM],v[MM],w[MM],bs=0; int jl[MN],S,T,N,dl[MN],dy[MN]; 阅读全文
posted @ 2019-12-20 21:23 lnzwz 阅读(616) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示