9月杂题
想了想以后的笔记不必写得太复杂,把解题精髓记下就可以了,这样也方便复习。
P6880 [JOI 2020 Final] オリンピックバス
直接枚举翻转的边然后跑最短路复杂度爆炸,但考虑一个不在 \(1\) 到 \(n\) 以及 \(n\) 到 \(1\) 最短路上的边的答案其实是好算的:建出以 \(1\) 为起点的最短路树,以 \(n\) 为起点的最短路树,再在反图上建出上面两种树即可计算;在最短路上面的暴力。
BZOJ3694 最短路
套路地,计算每条边的删边最短路,考虑枚举一条非树边,计算包含其到某个点的答案并用其更新树上对应链上的答案。
拆贡献,需要解决多次链 chkmin 的操作,最后输出每条边的权值。这个问题可以对操作按权值排序后每次暴力跳用并查集合并来解决。
P4308 [CTSC2011] 幸福路径
倍增,设 \(f_{t,i,j}\) 为从 \(i\) 到 \(j\),走了 \(2^t\) 步的最大收益,类似 Floyd 转移。
CF1100E Andrew and Taxi
显然二分,现在问题是检查这张有向图能否通过只改权值 \(\le mid\) 的边的方向使其无环。
\(\le mid\) 的总可以定成无环,故将权值 \(>mid\) 的边建图跑拓扑排序,如果有环就无解,否则,枚举 \(\le mid\) 的边查看两端拓扑序来定向。
P1954 [NOI2010] 航空管制
建图跑出每个点真实的 \(k\) 是多少,第一问即将 \(k\) 值从大到小依次考虑倒序安放。第二问相当于考虑 \(i\) 时,拓扑序在 \(i\) 之前的都要早飞,那么将拓扑序在这之后的按 \(k\) 值从大到小安放,最后一个空出来的位置就是 \(i\)。
P7624 [AHOI2021初中组] 地铁
设环长为 \(C\),随后建图跑差分约束查看是否有无负环(有无解)。
但本题需要求 \(C\) 的合法解个数,注意到其一定是一个区间,那么我们考虑二分,但是如果当前 \(mid\) 不合法是要变小还是变大呢?可以查看负环中 \(C\) 的系数,为正即要变大,为负即要变小,为零就与 \(C\) 无关,原问题无解。
P2272 [ZJOI2007] 最大半连通子图
注意到题目所说的最大半连通子图即原图 SCC 缩点后由 SCC 组成的最大的链,直接 DP 即可。
S15.24.11.3. 都是假的
行与列显然独立,考虑只有一行怎么做。发现如果切成 \(x\) 段合法,切成 \(p\) 段也合法,那么切成 \(x\times p\) 段也合法(\(\gcd(x,p)=1\)),也就是积性函数。
那么快速判断切成 \(x\) 段合法的方法可以类似字符串判周期的方法用一次询问,但这道题要求无交,就只能奇数问两次,偶数问三次。
P5975 [CEOI2009] photo
注意到矩形一定互不相交,于是区间 DP:\(f_{i,j,k}\) 为考虑横坐标 \([i,j]\),纵坐标都在 \(k\) 之上,转移考虑将 \([i,j]\) 切两边或者放一个最大的矩形从更小的高度转移过来。
P5369 [PKUSC2018] 最大前缀和
观察最大前缀和的性质后状压 DP。
P3959 [NOIP2017 提高组] 宝藏
按深度分层状压 DP。
[ARC106E] Medals
Hall 定理后状压 DP。
CF1773G Game of Questions
注意到 问题 被重复选择不会让局势变化,故只用状压在场的人。
CF1726E Almost Perfect
将排列画成置换环,那么这个环必须满足一条边两端点编号差 \(\le 1\),那么就只可能是一、二、四元环。
CF1842G Tenzing and Random Operations
将一次操作对答案的影响,拆成每个元素可以使用的资源。
CF1574F Occurrences
观察序列 \(a\) 满足的要求相当于包含 \(A_i\) 中一个元素,就必须包含 \(A_i\) 的所有元素并且还满足顺序,进而建图后跑总量一定的完全背包。
CF1765C Card Guessing
通过固定花色转移,记录花色最小的牌数量。
[ABC262Ex] Max Limited Sequence
区间极值限制 DP,将每个上界 \(x\) 拆成区间内至少一个 \(=x\),全都要 \(\le x\)。设 \(f_{i,j}\) 考虑位置 \(i\),离 \(i\) 最近的 1 位置为 \(j\) 来转移来避免容斥。
P7606 [THUPC2021] 混乱邪恶
转移相当于平面游走,可以通过随机打乱来限制范围。
CF1909F2 Small Permutation Problem (Hard Version)
将排列作为 \((i,p_i)\) 画在平面上,那么相当于在两个 \(a_i\ne 1\) 的 L 形区间内放一些互不攻击的车,容斥 DP。
[AGC060C] Large Heap
只有极左链上的点和极右链上的点,那么 DP 当前放数放到了极左链的 \(i\) 层,极右链的 \(j\) 层。
CF1730F Almost Sorted
将排列 \(q\) 后查看 \(p_{q_i}\) 看作对 \(p\) 重排。观察题目对 \(p\) 的要求后发现 DP 时只用关心最小未填的数 \(i\) 和 \([i,i+k]\) 的填入情况。
CF1174E Ehab and the Expected GCD Problem
分析前缀 GCD 种类数的性质,发现开头的数是关键的,他必须含有的质因子非常多,即只能由很多 \(2\) 和最多一个 \(3\) 组成,于是 DP 时记录 2 与 3 的个数。
CF1799G Count Voting
容斥 DP,妙处在于多重排列的计算,可以把分母拆掉放到 DP 转移的过程中。
CF1559E Mocha and Stars
看见 \(\gcd=1\) 想到容斥,于是容斥每次都做一遍背包,因为每一次的容量组成的是调和级数所以对了。
CF1781F Bracket Insertion
括号这种东西想到将 \((\) 设为 \(+1\),\()\) 设为 \(-1\),那么合法当且仅当最小前缀和为 \(0\)。于是记录最小前缀和后区间 DP。
P10813 【MX-S2-T4】换
刻画一个序列是否被排序:枚举数 \(x\),将序列中 \(\le x\) 的置为 \(0\),\(>x\) 置为 \(1\),那么对于每一个数 \(x\),这个 01 序列都有序,那么就是排好的。从小到大扫描 \(x\) 的过程是全 0 变为全 1 的过程,DP 记录这个 01 序列。
CF21D Traveling Graph
无向图有欧拉回路等价于每个点度数为偶,状压为度数奇数的点。
[AGC013E] Placing Squares
平方的组合意义:有顺序选出两个元素(可以是一个)的方案数。于是 DP 记录没选/选了第 1 个/选了第 2 个。
P4827 [国家集训队] Crash 的文明世界
使用斯特林反演,注意到 \(f_{x,j}=\sum_{i\in x}C^i_{dis(i,x)}\) 可以换根:\(C^i_{dis(i,x)}=C_{dis(i,x)-1}^i+C_{dis(i,x)-1}^{i-1}\)。
CF1327F AND Segments
拆位后就是 [ABC262Ex] Max Limited Sequence 的最小值版本。
CF1580B Mathematics Curriculum
看到最大值想到笛卡尔树,题意转换为在笛卡尔树上深度为 \(m\) 的元素恰好有 \(k\) 个。
P6326 Shopping
点分治,树上依赖性背包。
[ARC184B] 123 Set
画出数表,选数就是相当于用一个「 形来覆盖数表,用状压 DP。
[ARC160F] Count Sorted Arrays
同 MXOI 换。
CF1830D Mex Tree
点权为 0/1 的 mex,可以转换成颜色——拥有不同颜色的路径的权为 2,否则为 0/1,这启发我们维护树上颜色块,又通过计算答案下界来优化。
CF1750F Majority
考虑一个不合法的 S 最后会变成什么,一定是一段 1 一段 0 交替,并且一段 0 的长度一定大于左右两端 1 长度的总和,于是面向结果 DP 出不合法的序列个数。
CF1179D Fedor Runs for President
添加边 \((x,y)\) 后对答案的贡献,随后 DP 算出 \(f_x\) 为 \(x\) 子树以 \(x\) 为起点的路径最大贡献,于是对于一个节点枚举两个儿子的最大路径拼成环,再对此斜率优化。
Abnormal Permutation Pairs (hard version)
看到字典序,想到枚举 LCP,然后 DP 记录从后往前填的排列的阶数以及两个序列逆序对的差值,转移枚举两个数表示新加入的数。DP 优化:注意到转移只考虑第二维的差值于是转移变成枚举差值。
Chemistry Lab
元素之间可以随意组成,想到画到平面上,则两个元素的连边全都是可以选的点,且最终是凸包,于是 DP 这个凸包,但我们不用记录斜率因为不合法的转移都不优。
P6669 [清华集训2016] 组合数问题
考虑 Lucas 定理,相当于在 \(k\) 进制下对 \(n,m\) 拆位,对应每一位计算组合数再相乘,而最终为 \(0\) 相当于其中至少一个组合数为 \(0\),数位 DP。
[ABC240Ex] Sequence of Substrings
类似最长上升子序列的转移,但注意到一个元素超过 \(\sqrt{2n}\) 就必定不优。
CF1292C Xenon's Attack on the Gangs
给树上边分配 \([0,n-2]\) 的权值来最大化 mex 相关,这里的 mex 也可以拆贡献。
CF1016F Road Projects
将树看作从 \(1\) 到 \(n\) 的链上挂着一些子树。
P2481 [SDOI2010] 代码拍卖会
将数位不降的数,每一个数位写成与其大小相等的 \(1\) 的个数组成的数,然后横着就变成一堆 \(111\dots111\) 相加,因为其模 \(p\) 有循环节所以好 DP 了。

浙公网安备 33010602011771号