「Log」做题记录 2023.9.25-2023.10.29
\(2023.9.25-2023.10.1\)
\(\color{limegreen}{P3524}\)
考虑删掉两个不相连的点,这两个点必定一个在团内一个在团外,删掉 \(\frac{n}{3}\) 个点对之后一定保证剩下的点都在我们要的团内。
\(\color{limegreen}{P3522}\)
单调队列维护一下左右端点,加入时取交即可。
\(\color{royalblue}{P3520}\)
考虑到性质类似欧拉图,求欧拉回路缩环时求解即可。
\(\color{royalblue}{P3518}\)
考虑到性质:若 \(a\) 为密码,则 \(\gcd(n,a)\) 一定为密码,并且其倍数也是,求最小的合法 \(d|\gcd(n,x)\),有答案 \(\frac{n}{d}\)。
\(\color{royalblue}{P3528}\)
塞到堆里贪心即可。
\(\color{royalblue}{P3521}\)
类似 CDQ 的,线段树合并的过程中求解即可。
\(\color{blueviolet}{P3519}\)
存下每个字符出现的所有位置,枚举最多、最少字符,将两个字符出现位置拿出来合并扫一遍求最大子段和即可,均摊复杂度正确。
\(\color{blueviolet}{P3527}\)
较为板的整体二分,思路奇妙。
\(\color{blueviolet}{P3523}\)
二分+树形 DP 验证。
\(\color{royalblue}{CF1795E}\)
先变成单峰最优,DP一下就行。
\(\color{blueviolet}{CF1794E}\)
对于每种距离存个哈希跑就行了。
\(\color{blueviolet}{P3525}\)
结论题,只有重心有解,写就完了。
\(\color{black}{P3516}\)
构造题,不知道为啥是黑的,贪心一下就行。
\(\color{blueviolet}{CF1486F}\)
讨论 LCA 相同与不相同,相同的拿个桶就解决了,不同的拿树状数组区间加和算贡献。
\(\color{blueviolet}{P3560}\)
最大流,考虑每次限制源点流量,跑残余网络。
\(\color{limegreen}{P3560}\)
贪心地扫一遍。
\(\color{limegreen}{P3558}\)
注意到性质后直接 DP 即可。
\(\color{limegreen}{P3550}\)
巨大细节贪心。
\(\color{limegreen}{P3551}\)
逆着思考,贪心即可。
\(\color{royalblue}{P3556}\)
离线处理,维护最小奇偶距离。
\(\color{royalblue}{P3557}\)
注意到一种性质使得直接构造成为正解。
\(\color{blueviolet}{P3554}\)
二分+DP 验证。
\(\color{blueviolet}{P3563}\)
最小值是直接一层正边一层反边使得一个边贡献一个点对,最大值不难想到找重心的所有子树做背包,恶心的是需要 bitset 优化,阴间的。
\(\color{blueviolet}{P3553}\)
二分+模拟验证。
\(\color{royalblue}{P3579}\)
整除分块即可。
\(\color{royalblue}{P3567}\)
主席树板子。
\(\color{blueviolet}{P3566}\)
从多到少放置即可。
\(\color{blueviolet}{P5952}\)
把墙看作边,跑最小生成树的时候维护一下答案即可。
\(\color{blueviolet}{P6663}\)
构造题,在最小值基础上回转构造即可。
\(\color{blueviolet}{P3515}\)
考虑到贡献只会有 \(\sqrt n\) 个数产生,直接枚举。
\(\color{blueviolet}{P3562}\)
按照斜率排序跑 DP 即可。
\(\color{blueviolet}{P5955}\)
贪心的选,双指针扫一圈。
\(2023.10.2-2023.10.8\)
\(\color{black}{P3547}\)
分类讨论,然后删边优化复杂度。
\(\color{blueviolet}{P3576}\)
倒推即可。
\(\color{blueviolet}{P3580}\)
单调队列优化 DP。
\(\color{blueviolet}{P3575}\)
乱搞。
\(\color{blueviolet}{P3564}\)
做前缀和,考虑到相邻位置只会相差一,贪心即可。
\(\color{blueviolet}{P3569}\)
维护区间左右端点情况。
\(\color{blueviolet}{P3565}\)
\(n^2\) 统计一下即可。
\(\color{blueviolet}{P3574}\)
树 DP 一下。
\(\color{blueviolet}{P7561}\)
二分+set 搞一下。
\(\color{blueviolet}{P9521}\)
化式子后维护凸包。
\(\color{royalblue}{P3536}\)
记录每个数取到哪里,打标记即可,复杂度线性自然对数。
\(\color{blueviolet}{P3540}\)
设 \(x_i\) 从小到大排序,则 \(x_2+x_3\) 会带来不确定性,枚举其位置即可。
\(\color{blueviolet}{P3539}\)
每次找最的斐波那契数即可,递归运算,只会越来越小。
\(\color{blueviolet}{P3532}\)
考虑枚举 \(\gcd\),预处理一下最小次小质因数分解指数和的倍数即可。
\(\color{blueviolet}{P3534}\)
神仙贪心。
\(\color{blueviolet}{P3570}\)
记录位置随便处理即可。
\(\color{royalblue}{CF1775E}\)
转成前缀和一眼切。
\(\color{blueviolet}{CF1253F}\)
考虑经过一条边的限制,列不等式后可以最小生成树。
\(\color{blueviolet}{CF1736E}\)
DP。
\(\color{blueviolet}{CF908G}\)
数位 DP。
\(\color{royalblue}{P5058}\)
圆方树板子。
\(\color{blueviolet}{P3542}\)
处理上界,从小向大贪心。
\(\color{royalblue}{P3531}\)
直接转逆序对数。
\(\color{blueviolet}{P4320}\)
建圆方树,求两点路径之间圆点数量。
\(\color{blueviolet}{CF997C}\)
化简式子直球。
\(\color{royalblue}{CF991D}\)
贪心可行。
\(\color{blueviolet}{P4606}\)
圆方树,询问点按照 DFS 序排序,计算贡献。
\(\color{blueviolet}{P4630}\)
圆方树+树 DP。
\(\color{blueviolet}{CF487E}\)
圆方树+树剖。
\(2023.10.9-2023.10.15\)
\(\color{blueviolet}{CF1763F}\)
直接圆方树即可。
\(\color{blueviolet}{P3577}\)
根据深度不超过 \(10\) 进行状压。
\(\color{blueviolet}{P3530}\)
差分约束型连边,根据强联通分量统计贡献。
\(\color{blueviolet}{P3546}\)
一个强联通分量答案固定,多个之间互不影响,考虑一个强连通分量贡献即 \(\min\{dis(i,j) + 1\}\)(\(i,j\) 都为其中的点),Floyd 求解即可。
\(\color{blueviolet}{P3533}\)
分讨点对情况,倍增维护一下随便做了。
\(\color{black}{P3543}\)
先转换为差分,套一个 exgcd,求出特解之后调和即可。
\(\color{blueviolet}{CF1059E}\)
倍增后预处理每个点最多向上扩展到哪里,从叶子节点向上贪心即可。
\(\color{blueviolet}{P3976}\)
大力树剖。
\(\color{royalblue}{CF40E}\)
考虑到有一行或一列一定空着,去掉了一维限制,剩下的随便搞。
\(\color{blueviolet}{P4381}\)
求基环森林直径和,讨论直径情况,对于经过环的直径可以进行单调队列优化。
\(\color{limegreen}{AT\_abc243\_e}\)
考虑一条边被删的充要条件即可。
\(\color{royalblue}{AT\_abc243\_f}\)
考虑线性 DP,将前一些个拿出来抽取一些。
\(\color{royalblue}{CF466E}\)
离线下来乱搞,转换为判断一个点在不在一条直链(不拐弯)上。
\(\color{blueviolet}{CF838B}\)
大力树剖,简单维护一下子树内信息随便做。
\(\color{blueviolet}{CF1778F}\)
注意到值域很小,打进 DP 状态,约数个数级别在 \(\sqrt V\),随便做(虽然赛时没切出来)。
\(\color{blueviolet}{CF1632E1}\)(\(\color{blueviolet}{CF1632E2}\) 双倍经验)
考虑对于一个 \(x\),可以列出关于 \(ans_x\) 的不等式,求虚树直径即可,简单维护后根据 \(ans\) 单调性 \(O(n)\) 做。
\(\color{royalblue}{AT\_abc243\_g}\)
不难想到 \(\sqrt n\) DP,考虑计算重复贡献方式即可做到 \(n^{\frac{1}{4}}\)。
\(\color{blueviolet}{P7961}\)
DP,状态很妙。
\(\color{limegreen}{AT\_abc242\_e}\)
考虑是否顶到上限,对每一位做一下就行。
\(\color{royalblue}{AT\_abc242\_f}\)
考虑黑车放完之后白车贡献是好算的,设 \(f_{i,j,k}\) 表示用 \(i\) 辆车刚好占用 \(j\) 行 \(k\) 列,转移是好推的。
\(\color{royalblue}{AT\_abc242\_g}\)
莫队板子。
\(\color{royalblue}{CF912D}\)
考虑每只鱼的贡献,贪心地从中间向四周放,堆 + BFS 即可。
\(\color{royalblue}{CF840B}\)
一条无向边贡献两个度数,所以度数一定为偶数,并且偶数一定有解,DFS 构造即可。
\(\color{royalblue}{CF1037E}\)
倒序处理删点即可。
\(\color{royalblue}{CF1278D}\)
树的边数一定为 \(n - 1\),大于这个边就停止,否则就并查集维护连通性。
\(\color{blueviolet}{CF229C}\)
纯纯数学题,简单的。
\(\color{blueviolet}{CF1082E}\)
转换为区间内众数出现次数与此区间内 \(c\) 个数差值最大值,维护前缀和处理即可。
\(\color{blueviolet}{CF859E}\)
连有向边之后分讨即可。
\(\color{royalblue}{CF893E}\)
不难想到按照质因数处理,正负分开做,排列组合即可。
\(\color{blueviolet}{CF746G}\)
每层有叶子数量的上下限,求出后构造即可。
\(2023.10.16-2023.10.22\)
\(\color{royalblue}{CF1201D}\)
因为只能从下向上走,所以就只用一行一行考虑,对于一行显著从一头走到另一头是最优的,所以记录 \(f_{i,0/1}\) 表示取完第 \(i\) 行后在左 / 右的最少行走数量,至于安全列的限制只要预处理左右最近的安全列即可。
\(\color{blueviolet}{CF346B}\)
LCS 问题基础上多加一维,记录第三个串匹配了多少,记一个 KMP 的 \(nex\) 数组即可。
\(\color{blueviolet}{CF509C}\)
贪心地,一定是从低位向高位放 \(9\) 使得一个数尽量小,在此基础上,枚举当前数字哪一位第一次比上一个数字大并且合法,最小的显然最优。
\(\color{blueviolet}{CF354C}\)
枚举公因数,找合法区间,桶前缀记一下就解决了,复杂度线性自然对数。
\(\color{blueviolet}{CF1152D}\)
贪心地,考虑偶数深度点都选最优,类似卡特兰数的递推求解即可。
\(\color{blueviolet}{P3302}\)
不考虑连边操作就简单地主席树即可,连边启发式合并就行。
\(\color{blueviolet}{CF1146F}\)
DP,三种状态是显然的,只要注意转移即可,每次将一个子树合并到当前处理过的子树中。
\(\color{blueviolet}{CF1583F}\)
神仙构造题,题解塞到套题里面。
\(\color{blueviolet}{P4768}\)
预处理到 \(1\) 的距离,然后 Kruskal 重构树简单倍增维护一下即可。
\(\color{blueviolet}{P4322}\)
式子是显著的,考虑分数规划,二分后树 DP 也是显著的。
\(\color{blueviolet}{P6087}\)
显著的分数规划,需要注意的是可能出现区间长度小于 \(L\) 的解,所以要扩展至 \(L\) 进行特殊处理。
单调队列边界寄了,调了好一会。
\(\color{blueviolet}{P2473}\)
状态是显著的,但正着转移并不可以,因为状态分布不均匀,没法直接算方案数,所以倒着转移。
感觉是典型的题,有点神仙(大概吧)。概率正着推,期望逆着推。(题解里的话。)
\(\color{blueviolet}{P4197}\)
思路是显著的,Kruskal 重构树后上主席树查询(按照 DFS 序建即可)。
\(\color{blueviolet}{P3209}\)
2-SAT。
\(\color{blueviolet}{CF27D}\)
2-SAT。
\(\color{blueviolet}{CF1030E}\)
不难想到结论,序列必须 \(1\) 数量为偶数并且最大的 \(1\) 个数不能超过总和一半。
\(\color{blueviolet}{P1505}\)
树剖,简单的。
\(2023.10.23-2023.10.29\)
\(\color{blueviolet}{P6348}\)
显著的线段树优化建图。
\(\color{blueviolet}{P2482}\)
猪国杀,巨大模拟。
\(\color{royalblue}{CF1772G}\)
首先从小往大打,对于每一轮有一个正负分界点,考虑分界点后移情况,细节处理即可。
\(\color{blueviolet}{CF369E}\)
正难则反,转化为二维数点,二维偏序即可。
\(\color{blueviolet}{CF348C}\)
根号分治,超过根号级别的集合一共有不超过根号个,打标记处理即可。
\(\color{blueviolet}{CF1495D}\)
考虑对于 \(x\) 和 \(y\) 共同的生成树一定包含两者的最短路径。
先假设 \(x, y\) 最短路径有且只有一条,考虑其上一点 \(z\),\(x, y\) 两者中一者到其最短路径依然有且只有一条,为了满足 \(dis(x, z), dis(y, z)\) 不变,必须保留此最短路。
当 \(x, y\) 最短路径不止一条时,对于这两条路径上的点依然需要满足上述 \(z\) 的条件,因此多条最短路都需要保留,此时一定会成环,无法保持树的形态,也就一定无解。
现在对于 \(x, y\) 两点已有一条唯一的链链接,考虑其他点如何挂在树上。对于一个点 \(u\) 有边 \((u, v)\),若保留此边(使得 \(v\) 为 \(u\) 的父节点)必须满足 \(dis(x, v) + 1 = dis(x, u) \land dis(y, v) + 1 = dis(y, u)\)。所以我们对于一个点找出其合法父节点个数,对所有的点乘法原理计数即可。
\(\color{blueviolet}{CF1511G}\)
首先转化问题,对于一个询问只要判断 \(\bigoplus \limits _{l \le c_i \le r} c_i - l\) 是否等于 \(0\) 即可。
设 \(f_{i, j}\) 表示 \(\bigoplus \limits _{i \le c_i \le i + 2 ^ j - 1} c_i - i\),考虑如何倍增转移。
\(f_{i, j}\) 由 \(f_{i, j - 1}\) 与 \(f_{i + 2 ^ {j - 1} - 1, j - 1}\) 两部分组成,前者的异或和可以直接转移过来,后者包括的元素每个会与需要的值相差 \(2 ^ {j - 1}\),所以需要额外异或上后者元素个数个 \(2 ^ {j - 1}\),只需要通前缀和维护一下区间元素个数即可。
求答案也是类似的,倍增逼近即可。
\(\color{blueviolet}{CF1510B}\)
首先考虑转化问题,进行简单图论建模,每个状态向可以达到的状态连边,于是得到一张 DAG。
首先考虑最劣情况,对于每一个点单独成为一条路径进行覆盖,贡献是其二进制下 \(1\) 的个数。每一个点可以选择一个出边把自己贡献抵消掉,这个就类似二分图最大匹配,费用流即可。
\(\color{blueviolet}{CF1539F}\)
我们只考虑 \(a_i\) 大于中位数的情况,另一情况可以通过取负反转数组取到相同情况,式子只有一个加减 \(1\) 不同。
区间固定时贡献是 \(\frac{t_l + t_m + t_r}{2} - t_r = \left \lfloor \frac{t_l + t_m - t_r}{2} \right \rfloor\)。
其中 \(t_l, t_m, t_r\) 分别表示小于、等于、大于 \(a_i\) 的 数字个数。
然后运用到一个套路,对于这种中位数的东西离线并从小到大遍历数字,比自己小的设为 \(-1\),比自己大的设为 \(1\),求一下以 \(i\) 结尾的后缀最大、以其开头的前缀最大,求和即可。
\(\color{blueviolet}{CF1469F}\)
首先注意到先挂长链更优,并且将中点挂在树上是更优的,可以使得整体深度更小。
设 \(fa\) 为链挂在上面的点,则会使得深度为 \(dep_{fa}\) 的点减少一个,并增加连续深度的两段点数,用线段树维护即可,注意分讨奇偶即可,以及注意空间。
\(\color{blueviolet}{CF1523E}\)
从期望的定义入手,转化为对在第 \(i\) 次仍没结束的概率求和,转化为古典概型直接排列组合即可。
\(\color{royalblue}{CF1515G}\)
首先一定要在强连通分量中进行求解,并且强连通分量里的环可以选择经过多次,次数可以是负数,因为模意义下是等价的,于是我们将所有的基本环找出来后用裴蜀定理求解即可。