随笔分类 - 技巧-状态压缩
摘要:题目 点这里看 F 题。 分析 很不错的一道题。 我们可以尝试改写一下循环语句: for i in range(l, r): 其实等价于: for i in range(1, n): if( l <= i and i <= r ): 为了方便,这里“引入”了 if 语句,同时使用了 python 的
阅读全文
摘要:题目 点这里看题目。 分析 玄学题目。直接搬运题解.jpg 解决这道题首先需要用到处理强连通图的一种特殊方法:耳分解 定理:一个有向图 为强连通,当且仅当它可以通过如下方法构造: 维护一个图 ;初始时,\(V'=\{v\},E'=\varnothi
阅读全文
摘要:题目 点这里看题目。 分析 一个简单的初始想法是:计算所有最终不是强连通的方案,然后再用总方案减去。 那么非强连通的方案经过缩点后,必然会变成 DAG 的形状。我们可以枚举所有 DAG 的形态,计算方案数: 每个强连通块的方案数:子问题,递归即可; 外部 DAG 的数量; 考虑求解 DAG 的数量。
阅读全文
摘要:代码托管到第三方平台上。 NOI2021 题解 D1T1 轻重边 水题 D1T2 路径交点 卡常的屑水题 考虑 的情况,每种路径方案都可以使用一个排列来描述,排列的逆序对数量就可以用来描述交点数。 因此,设矩阵 $M\in R^{n_1\times n_1},M_{ij}=[(i,j
阅读全文
摘要:题目 点这里看题目。 分析 这种题目显然需要转化。 考虑我们该怎么枚举区间。由于操作顺序是从前到后的,因此可以想到将一段操作区间拆分成两段操作的后缀。 那么,如何实现操作的 " 减法 " 呢?也就是说,我们应如何消去另一后缀的影响? 注意到,如果我们同时对 和 执行操作的话,
阅读全文
摘要:题目 点这里看题目。 分析 这......看到 这么小,然后看到条件这么奇葩,显然是容斥计算。 但是先不慌,我们先考虑在没有任何限制的时候该怎么计算。 考虑枚举选的人数 ,然后找出哪些佣兵在选的人数为 的时候可以被选,设为 。那么总的方案数就是:
阅读全文
摘要:题目 点这里看题目。 分析 首先,由于仅仅是 " 存在 " 这一条限制很容易导致计重,且总方案数就是 。我们就可以考虑求补集,也就是不存在的情况。 然后有一个很显然的 DP : :序列长度为 ,此时序列的和 的极长后缀
阅读全文
摘要:题目 点这里看题目。 分析 题目本身不难想,只需要在正常的 DP 外多加一个辅助状态即可求解附加问题。 这个方法就不细讲了。重点说的是一个比较优雅的做法。 考虑我们要最大化被两端覆盖的边的数量,也即是最小化只被一端覆盖的边的数量。现在我们就是同时最小化两个信息,并且存在优先级。 思考一下哪里存在天然
阅读全文
摘要:题目 点这里看题目。 分析 首先我们可以考虑不存在任何限制的时候该怎么做。 根据 序列直接得出答案为 。 忽略那种做法,因为它难以处理 LCA 的限制。看到 很小,我们可以想到一个状态压缩的 DP : \(f(u,
阅读全文
摘要:题目 点这里看题目。 分析 奇奇妙妙的题目。 直接修改树上的路径会影响到很多条边,并不方便处理。我们需要压缩受影响信息的数量。 由于对点的处理更加灵活,因而我们考虑将边权转为点权。 考虑修改树上路径经常与树上差分挂钩,我们可以猜想第一种方法:给点赋权为它到根上所有边的权的异或和。 但是没有什么用,因
阅读全文