08 2023 档案
炸弹
摘要:# [[SNOI2017] 炸弹](https://www.luogu.com.cn/problem/P5025)  考虑无环/大于1的强连通分量的情况。此时仅需让首都连向除自己外入度
记忆化搜索
摘要:一般用于不好写状态的情况。 1 四维状态分别表示4种卡片使用的次数,然后直接考虑使用任意一张。 2 直接DP难度大,于是记忆化搜索,最大值从相邻四个点转移过来。 3 通过分析可知每个蓄水厂能运送到的沙漠地区一定是区间,用记忆化搜索预处理出来,然后使用经典贪心解决问题。 总结 顺序递推难度大的,不妨考
数位
摘要:# [母题](https://www.cnblogs.com/wscqwq/p/17660249.html) 考虑经典的前缀和思维,求出 ,求出 即可。 考虑先爆搜,分别记录当前处理到的位数,前导零,是否有限制,要求数的个数即可。 由于这些信息都很小,把它们
状压DP总结
摘要:动态规划-状压类-总结 状压类的题,一般都需要用到二进制的性质。(用到组合数概率也不小) 早期CSDN blog 国王 考虑用二进制表示摆放方式,然后使用位运算判断攻击。 AT199E Permutation 有一位很小,状压,状态类似于母题。 AT232F 有交换操作,所以与逆序对相关,然后数学讨
计数DP总结
摘要:动态规划-计数类-总结 计数类的题,一般都需要用到排列组合的知识,较常用的有阶乘、组合数(一般必不可少)、容斥原理、全集-补集=所求集。 背包类 母题 整数划分 本题虽然简单,但是却无意间将计数类 DP 与背包结合在一起,状态 表示用前 个数选到 的方
树形DP总结
摘要:推荐博客高度总结(三大类):https://blog.csdn.net/m0_73386348/article/details/131838916 动态规划-树形类-总结 树形类的题,一般都需要用到子树的信息。 树形 DP 分为两类,一类是换根,一类是状态表示的是一棵子树的信息。 tip 树的直径
小K的技术
摘要:# ****小K的技术****    。问两人最短路的较大值。 考虑到如果原图没有边 ,那么补图一定有;
aaa
摘要:# **The Captain** 给定平面上的 个点,定义两点的距离为 ,求从 的最小费用。 我们可以忽略 ,两个点分别建立 ,肯定会走较小的边。然后我们对 排序,只需对相邻的点连边,那么不相邻
最短缩减路径
摘要:# **最短缩减路径** 给定一张无向图,你可以让任意一条边的权值减半,求起点到终点的最短路径。 点数 ;边数 ; 边权 ,且均为偶数。 本题有两种思路: 1. 分层图,就只有一条边,只需要分两层,是比较简单的模型应用。 2
有依赖的背包问题
摘要:# [10. 有依赖的背包问题 - AcWing题库](https://www.acwing.com/problem/content/description/10/) 考虑树形 `DP`。 假设我们对于 ,已经计算完毕子节点 ,那么我们应该如何合并方案呢? 有一种方式是指数级枚举子节点的
多重背包
摘要:# [6. 多重背包问题 III - AcWing题库](https://www.acwing.com/problem/content/6/)  仅需记录一的个数,然后判断一下 。 # [code](https://www.luogu.com.cn/record/122951584)
round
摘要:# [P6218 [USACO06NOV] Round Numbers S](https://www.luogu.com.cn/problem/P6218) 与[P2602 [ZJOI2010\] 数字计数](https://www.luogu.com.cn/problem/P2602)区别:记录
数字计数
摘要:# [P2602 [ZJOI2010\] 数字计数](https://www.luogu.com.cn/problem/P2602) 可以分开考虑每种数,然后对于每种数,利用前缀和的思想, ,我们只要求出 之间的个数即可。 我们考虑爆搜,需要
tran
摘要:# [[ABC317F] Nim](https://www.luogu.com.cn/problem/AT_abc317_f) 这个问题可以通过数位动态规划(DP)来解决。 我们考虑以下的数位DP来确定从二进制表示的最低位开始的下一位: $\mathrm{DP}[n][f_1][f_2][f_3][
点分治板题
摘要:# [点分治](https://www.acwing.com/problem/content/254/) 点分治的思想:每次选定一个点,然后分别在它的子树内求解①,再计算跨越子树的情况,考虑当前点和每棵子树内的点②以及两两子树内的③。(有点绕)  题意可以转换为: 1. 单点修改。 2. 查询 1. 如果不存在某一个前缀平均值不低于 ,则输出整体平均值; 2. 否则,输出第一个不低于
translate
摘要:# [[ABC297G] Constrained Nim 2](https://www.luogu.com.cn/problem/AT_abc297_g) **`SG`函数**是本篇文章的先决条件。如果您不了解它,请参阅以往的ABC问题的解析文章。(类似问题:[ABC255-G](https://a
SG函数
摘要:# [SG 函数](https://www.acwing.com/problem/content/895/) 先定义,`SG` 函数对应有向无环图(`DAG`)上的一种游戏:有一枚棋子在起点上,每次可以沿着边往后移动,谁无法移动谁就输了。 公平组合游戏可以转换成他,只需要将局面中的所有状态看成一个节
nim游戏
摘要:# [nim 游戏](https://www.luogu.com.cn/problem/P2197) 给出结论:将所有数异或,若结果为 ,先手必败,否则先手必胜。 设异或值为 。 证明分三步: 1. 全 局面先手必败。 2. 对于当前局面若 ,存在**某种**方式
[ABC305G]
摘要:# [[ABC305G] Banned Substrings](https://www.luogu.com.cn/problem/AT_abc305_g) 考虑到字母只有 `a,b`,且限制串的长度不超过 ,可以想到以当前处理到的位数、结尾的字符情况为状态动态规划。可以指记录 位。 处
AC自动机
摘要:# [AC自动机](https://www.acwing.com/problem/content/description/1284/) 本质上是 KMP+Trie。 每个节点存储的 类似于 `KMP`,表示最长公共前后缀(前缀可以是从根出发的任意一条路径)。代码可以从 `KMP` 一一对应
[ABC314G]
摘要:# [[ABC314G] Amulets](https://www.luogu.com.cn/problem/AT_abc314_g) 考虑如果 是固定的,可以二分答案,然后暴力 `check`。 而本题显然不行。 有一个简单的性质:如果我们知道了最多可以打几只怪兽,那么带某种护身符的贡献是
[ABC314F]
摘要:# [A Certain Game](https://www.luogu.com.cn/problem/AT_abc314_f) 关于题目中的样例解释翻译如下: 将队伍中的球员编号表示为 的队伍称为队伍 $ \lbrace\ x_1,\ x_
[ABC314E]
摘要:# [**[ABC314E] Roulettes**](https://www.luogu.com.cn/problem/AT_abc314_e) 令 表示现在已经有 分,要达到 分需要的最小期望代价。 答案为 。 $\Large f_x=\min_{i=1}^
[ABC313E]
摘要:# [**[ABC313E] Duplicate**](https://www.luogu.com.cn/problem/AT_abc313_e) https://www.luogu.com.cn/blog/zyc139449/solution-abc313-e # [AC](https://www
OddOrEven
摘要:# [**D - Odd or Even**](https://atcoder.jp/contests/abc313/tasks/abc313_d) 考虑 。 下面的求和均为奇偶性的求和。 此时我们分别询问: $a_2+a_3+\dots
Ai+Bj+Ck=X
摘要:# [**G - Ai + Bj + Ck = X (1 <= i, j, k <= N)**](https://atcoder.jp/contests/abc315/tasks/abc315_g) 考虑 的范围,枚举 。 于是就转换成求解 。 这是一个扩展欧几
扩展欧几里得算法
摘要:裴蜀定理 对于任意正整数 ,记 ,一定存在整数 ,使得 ,且能凑出的数一定是 的倍数。(扩欧算法能直接解决的问题) 首先由于 都是 的倍数,所以能凑出的数必定是 的倍数。 关键
Shortcuts
摘要:# [**Shortcuts**](https://atcoder.jp/contests/abc315/tasks/abc315_f) 关键在于要根据 的幂次增长的速度的性质。 发现如果不跳过任何一个点,那么最坏情况下两两是 循环的,结果大概是 $n
ABC351D_MagicalCookies
摘要:# [**Magical Cookies**](https://atcoder.jp/contests/abc315/tasks/abc315_d) 根据问题的描述,如果在判断同一行或同一列的所有饼干是否具有相同颜色时,选择了时间复杂度为 或 的方法,
CF1738C_EvenNumberAddicts
摘要:# [CF1738C Even Number Addicts](https://www.luogu.com.cn/problem/CF1738C) 考虑综合只跟每个数的奇偶性有关,就先统计奇数个数及偶数个数。 有DP和数学分类讨论两种方法。 具体看题解吧:https://www.luogu.com.
可怜的狗狗
摘要:# [可怜的狗狗](https://www.luogu.com.cn/problem/P1533) 考虑到不包含,那么左右端点一定同时递增(不递增就要考虑莫队),那么插入、删除操作的次数固定。我们可以直接用平衡树搞查询第 值,注意移动端点时必须先插入再删除,不然会出现删除的数还没插入的情况。
优美的序列
摘要:# [优美的序列](https://www.luogu.com.cn/problem/P8895) 考虑放在中间一定是最小值,且只能有一个。 不止一个无解。 若存在**出现次数 的数**,答案为 。因为出现次数只要达到了两个以上,那么两边至少有一边有两个数,而条件是严格的。 其他情况
鬼子进村
摘要:# [P1503 鬼子进村](https://www.luogu.com.cn/problem/P1503) 开 `set` 维护即可。先插入 维护边界。 `D`:插入即可。 `R`:开个栈将所有插入操作存起来,每次删除栈顶。 `Q`:先看是否在集合中,在就是 ,否则找前驱后继
[ZJOI2007]报表统计
摘要:# [P1110 [ZJOI2007] 报表统计](https://www.luogu.com.cn/problem/P1110) 考虑到操作 `MIN_SORT_GAP` 比较简单,用一个 `set` 维护前驱后继即可,重点关注 `INSERT`,`MIN_GAP`。 发现我们可以先开一个单链表来
丑数
摘要:# [丑数](https://www.luogu.com.cn/problem/P2723) 考虑用堆来维护。 每次删去最小值后,插入最小值乘以其他的素数。 考虑去重,根据 ,每次记录某个数上一个数是什么,每次乘的质因数都是按
平衡树
摘要:# [【模板】普通平衡树](https://www.luogu.com.cn/problem/P3369)&[【模板】普通平衡树(数据加强版)](https://www.luogu.com.cn/problem/P6136) 考虑最简单的平衡树——Treap(Tree+heap),从它的名字上就可以
数字游戏
摘要:# [P1043 [NOIP2003 普及组] 数字游戏](https://www.luogu.com.cn/problem/P1043) 首先考虑链的情况怎么做。 发现就是划分 次,直接考虑类似于[乘积最大](https://www.luogu.com.cn/problem/P1018)的
乘积最大
摘要:# [P1018 [NOIP2000 提高组] 乘积最大](https://www.luogu.com.cn/problem/P1018) 我们直接先考虑 `DP`。 令 表示前 个数,放置 个乘号的答案。 我们考虑转移最后一个乘号的位置,设最后一个乘号放在第 $
树上计数2
摘要:# [树上计数2]([2534. 树上计数2 - AcWing题库](https://www.acwing.com/problem/content/2536/)) 我们先考虑一般的问题,即序列上的问题。 发现这题是HH的项链。 然后我们考虑树上怎么转换成序列上。 我们使用欧拉序(对于每个点,在进入和
tarjan(dcc-e)
摘要:# [冗余路径](https://www.acwing.com/problem/content/397/) 考虑无向图的边双连通分量。 这个算法也叫 `Tarjan` 算法,且与有向图的强连通分量差不多。 边双是指图中任意两点间都存在两条不相交的路径(或删去任意一条边后图仍然连通)。 桥:切去这条边
bellman-ford
摘要:# [有边数限制的最短路](https://www.acwing.com/problem/content/855/) 有边数限制,只能用bellman-ford算法求解。 方法十分暴力,迭代 次,每次用所有边进行一次更新,当迭代了 次时,恰好经过了不超过 条边。而若第
观光
摘要:# [观光](https://www.acwing.com/problem/content/385/) 考虑对于每个点维护两个值:最短路和次短路。 记录二者的个数,最后只需判断次短路是否是最短路恰好加上一即可。 由于图不存在负权边,所以不存在呈环状的更新方式。 所以我们实现时可以考虑将一个点拆成两个
Tarjan(scc)
摘要:`Tarjan` 算法之一是一个强连通分量算法,可以找出所有的强连通分量,时间复杂度线性。 算法中对于搜索树(如下图)作了如下定义:  我们首先考虑暴力合并。 暴力就是每次对于一个点 ,暴力地对其子树再做一遍深度优先遍历求解,然后算上自己的答案。这样做的复杂度是 。 考虑如果将每个点对应的子树的
梦幻布丁
摘要:# [2154. 梦幻布丁](https://www.acwing.com/problem/content/2156/) 考虑先维护连续段数。 我们可以先搞几个单链表,每个单链表存储的是每种颜色处于的所有位置,由于连续段数等于相邻两数不同的个数,我们可以先算出初始的情况,然后对于每次修改,暴力的将一
ORSum
摘要:# [ABC291G OR Sum](https://atcoder.jp/contests/abc291/tasks/abc291_g) 题意:有两个长度为 的序列 ,可以给 序列向左循环移动若干位,求 的最大值。$N\le 5\time
TeleporterAndClosedOff
摘要:# [Teleporter and Closed off](https://www.luogu.com.cn/problem/AT_abc291_f) ## 思路 首先考虑从起点和终点分别 `bfs`(终点的 `bfs` 定义为从其他所有点到他,即在反向图上),预处理出两个距离,可以在 $O(nm)
历史研究
摘要:# [历史研究](https://www.acwing.com/problem/content/description/2525/) ## 思路 考虑到维护最大值的话,删除操作不太方便,我们考虑回滚莫队。 我们对于左端点在一个块内的情况一起处理,分两类讨论: 1. 右端点也和左端点在一个块内,那么直
数颜色
摘要:# [[国家集训队] 数颜色 / 维护队列](https://www.luogu.com.cn/problem/P1903) ## 思路 考虑到除了修改操作和数据范围以外,其余与[[SDOI2009] HH的项链](https://www.luogu.com.cn/problem/P1972)一样。
incrementOfCoins
摘要:# [[ABC184D] increment of coins](https://www.luogu.com.cn/problem/AT_abc184_d) ## 思路 设 表示三种金币有 时要到达 的概率。 $f(A,B,C)=(\dfrac{A}
ThroughPath
摘要:# [[ABC187E] Through Path](https://www.luogu.com.cn/problem/AT_abc187_e) ## 思路 我们考虑利用 `dfs` 序将树转换成一个序列(树链剖分中的一小部分),如下图所示:  考虑一个判断某个点 是否为另一个点 后代的方法:令 表示 的 序,令 表示离
XorDistances
摘要:# [[ABC201E] Xor Distances](https://www.luogu.com.cn/problem/AT_abc201_e) 首先,根据 ,一条路径 $dis(u,v)=(dis(1,\text{LCA})\oplus dis(1,u))\oplus(
RegularTriangleInsideaRectangle
摘要:# [[ABC292F] Regular Triangle Inside a Rectangle](https://www.luogu.com.cn/problem/AT_abc292_f) 首先,最大的正三角形的三个顶点,一个是矩形顶点,另两个在边上,如图。  借本题来描述一下莫队算法。 莫队算法是将询问离线排序,使得时间复杂度控制在 的量级。 首先考虑暴力做法,每次对于一个询问,将询问中的