2025-8-9 总结
图论 \(1\)
G - National Property
情况
- 时间:\(40min\)
- 预期:\(\text{AC}\)
- 实际:\(\text{AC}\)
知识点
- \(\text{2-SAT}\)
思路
我们发现这道题相邻两个字符串 \(s_{i-1}\) 和 \(s_i\) 有以下几种关系:
- \(s_{i-1}\) 为 \(s_i\) 的前缀。不用更改,一定可行。
- \(s_i\) 为 \(s_{i-1}\) 的前缀。一定不存在可行方案。
- 设 \(j\) 为 \(s_{i-1}\) 和 \(s_i\) 第一个不相同的位置,\(x\) 为 \(s_{i−1,j}\),\(y\) 为 \(s_{i,j}\)。
- \(x<y\)。此时 \(x'<y'<x<y\),可以发现,若 \(x\) 为小写,则 \(y\) 一定为小写;若 \(y\) 为大写,则 \(x\) 一定为大写,转换一下形式就变成了 \((x\to y)∧(\lnot y\to\lnot x)\)。
- \(x>y\)。此时 \(y'<x'<y<x\),可以发现,只有当 \(x\) 为大写,\(y\) 为小写时才能成立。转换一下形式就变成了 \(\lnot x∧y\)。
所以只需要转化一下,然后建图跑 \(\text{2-SAT}\) 即可。
分析
一开始想到了用拓扑排序来做这一道题,也就是把相邻两个字符串第一个不同的位置相连,然后再排序。结果发现写错了,并且有一堆情况需要讨论。所以就重新思考,想到了以上的方法。
树上游戏 \(1\)
H - Palindromes in a Tree
情况
- 时间:\(30min\)
- 预期:\(\text{AC}\)
- 实际:\(\text{AC}\)
知识点
- 点分治,状压
思路
这道题可以采用点分治,对于偶回文串,要求每个字母的出现次数为偶数,对于奇回文串,要求有且仅有一个字母的出现次数为奇数次,这个可以拿二进制记录状态,然后就是正常的点分治操作。统计答案是就是对 \(x\) 到分治中心 \(w\) 这条链加,打个 \(tag\) 最后统计即可。
分析
一开始就想到了枚举中点,然后求解,但是复杂度很大,然后发现只有 \(20\) 个字母,然后可以状压,所以从前面和后面分别状压一次,看有没有相等的即可。
I - Road Projects
情况
- 时间:\(1h\)
- 预期:\(\text{AC}\)
- 实际:\(\text{AC}\)
知识点
- 树形 \(\text{dp}\)
思路
首先把 \(1\to n\) 的链提取出来,显然这一条链上会挂很多子树。考虑链上的一个节点 \(x\) 以及它的子树,显然如果这个子树内有大于等于 \(3\) 个节点(包括 \(x\))则在这个子树内一定能选出两个没有直接连边的点,每次查询只要连这两个点即可,于是答案就是原树上 \(1\to n\) 的最短路。现在我们考虑不存在这种子树的情况记 \(dis_x\) 为链上节点 \(x\) 距离一号节点的距离,\(f_x\) 为 \(x\) 子树内距离 \(x\) 最远的那个点离 \(x\) 的距离。假设当前选到了一个点 \(i\),我们只要找出一个 \(j<i\),使得 \(f_j+f_i+dis_j+(dis_n+dis+i)+x\) 最大即可,不看所有与 \(j\) 无关的量,于是发现只要维护 \(f_j+dis_j\) 的最大值,也就是维护一个前缀最大值,用单调栈扫一遍即可。
树上问题 \(2\)
E - Tenzing and Tree
情况
- 时间:\(30min\)
- 预期:\(\text{AC}\)
- 实际:\(\text{AC}\)
知识点
- \(\text{dfs}\),贪心
思路
我们考虑枚举重心 \(p\),则此时最小的答案就是选 \(dep\) 最小的 \(k\) 个点作为黑色点。这里不需要考虑选出来后发现重心不是 \(p\) 的问题,因为重心错误只会导致答案更小。于是我们直接钦定重心,\(\text{dfs}\) 计算深度就可以了。
分析
其实一开始并没有思路,然后画了一下图,发现当一个点是树的根节点时,深度最小的 \(k\) 个点作为黑色点一定最优,所以想到了这种做法。

浙公网安备 33010602011771号