8.20 总结
T1
死因:没判 \(n1=n2\)。
发现数据范围非常小,\(n\le8\),于是考虑直接全排列一一对应来统计。
具体地,每枚举一个全排列就用邻接矩阵判断是否连边即可。
注意会有重复,于是可以把边集状压判重。
复杂度 \(\mathcal O(n!n^2)\)。
T2
这种题必须在 10 min 内写完,尽量在 5 min 内写完。
按照深度做一遍前缀和,查询 \(\text{lca}\) 就好了。
鉴于需要快速求 \(\text{lca}\),这题可以给到黄,否则我觉得就是个橙题。
T3
首先 floyd 求出多源最短路,然后按照时间顺序 dp,这是非常好想的。复杂度 \(\mathcal O(k^2)\)。
考虑优化这个 dp。转移的条件为时间差不小于最短路,但是时间差可以很大,最短路最大为 \(n-1\),而 \(n\le200\)。那么只需要枚举时间差小于 \(n-1\) 的点转移,剩下的直接做一个前缀 \(\max\) 就好。
T4
发现是一个类似关路灯的问题,每次走过一段路径一定会收复路径上所有城池。
那么考虑做一个区间 dp,非常经典,复杂度 \(\mathcal O(n^2t)\)。
发现瓶颈在与 \(t\)。考虑优化它。
发现 \(t\) 的作用在于判断当前城池的贡献。
我们猜测复杂度为 \(\mathcal O(n^3)\),考虑什么东西也可以算贡献。
发现每过 \(1\) 单位时间,剩下的所有没有被收复的城池都会减 \(1\) 的贡献。那么考虑维护没有被收复的城池的个数。
但是当 \(t>a_i\) 时,答案会被减为负数。转移时考虑每座城池有没有被减为负数来确定选/不选。发现没有减为负数时不选一定不优,减为负数后选了一定不优,那么就无需考虑更多。
于是复杂度降到了 \(\mathcal O(n^3)\)。