10.8 模拟赛(2023 CSP-S 十连测 #5)

炼石计划 10 月 28日 CSP-S 十连测 #5【补题】 - 比赛 - 梦熊联盟 (mna.wang)

复盘

T1 秒了。30min。

T2 题目越短越难。但是链的是经典题目,写了。小样例太水,大样例太大,不方便猜结论。于是先写暴力然后自己造样例。

模拟了五六组感觉可以按照 lca 的深度降序排序,然后能选就选。这个做法和链兼容。

但是需要维护树上路径加路径查 \(\max\)。树剖秒了。

三个做法融合起来的代码 5KB。调了 1e4514min 后树剖终于不挂了。

对拍。

T3 \(n \le 25\)??好像一分不会啊。每条边都包含 "BJMP" 感觉好做,想。

但是 \(T \le 10^9\) 什么做法都过不了。放弃。

算了先写 \(n \le 5, T \le 10\) 的爆搜吧。写一半发现加个记忆化就是个 DP,复杂度 \(\mathcal O(16nT)\),能过前两个部分分。

T4 \(n, k \le 15\) 爆搜过不去啊。好像又一分不会了。

我相信数据是很水的。于是写了爆搜加小剪枝。

预计 \(100+100+40+[0, 15] = [240,255]\),实际 \(100+100+50+15=265\)。树剖没挂就是强。

总结

好的:

  • 树链剖分没写挂。
  • 没有挂分。

不足:

知识点

  • T1:递推,矩阵加速;
  • T2:贪心,树链剖分,LCA;
  • T3:DP,矩阵加速;
  • T4:

题解

A. 男女排队

显然有递推:

f[i][0] = f[i - 1][0] + f[i - 1][2];
f[i][1] = f[i - 1][0];
f[i][2] = f[i - 1][1] + f[i - 1][3];
f[i][3] = f[i - 1][1];

矩阵加速即可。

B. 树上最多不相交路径

模拟几组样例可以发现若按照 lca 的深度,从大到小,能选就选。具体需要树剖维护树上路径加,路径求 \(\max\)

感性理解一下为什么这样是正确的。选择一条路径后,它的 lca 的子树中的点,是不能通过 lca 走到子树外面的。所以我们按照 lca 的深度降序选。

C. 生日

首先将一条 \(u \to v\) 的边拆成两条:\(u \to v\)\(u \to\) 某个虚点 \(\to v\),边权都是 \(1\)。分别表示不经过商店和经过商店。

中间这个虚点的数量可以做到 \(\mathcal O(n)\) 而不是 \(\mathcal O(m)\)。我们只需要把 \(u\) 的每条出边对应的虚点都设成 \(u' = u + n\) 即可。具体的,初始化 \(u \to u'\),每次连边 \(u \to v\)\(u' \to v\) 即可。

考虑一个弱化问题:从 \(1\) 出发,不对购买的商品进行限制,在 \(T\) 秒内回到 \(1\) 的方案数是多少。

显然 DP:设 \(f(u, t)\) 表示在 \(t\) 秒时恰好到达 \(u\) 的方案数。转移 \(f(u, t) \to f(v, t + 1)\)\((u, v) \in \mathbb E\))。答案为 \(\sum_{t \le T} f(1, T)\)

第一维很小,第二维很大。矩阵快速幂即可。

对于原问题,我们考虑容斥。

首先求总方案数,即不对购买的商品进行限制,也就是上面的问题。这是全集。

减去某一种商品一定不购买的方案数。枚举那种商品一定不买。枚举每条边,如果这条边的商店里存在这种商品,把这条边断掉。

加上某两种商品一定不购买的方案数,容斥下去即可。

posted @ 2024-10-08 20:17  2huk  阅读(13)  评论(0编辑  收藏  举报