专栏文章
题解:P11834 [省选联考 2025] 岁月
P11834题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mip0jpxo
- 此快照首次捕获于
- 2025/12/03 04:11 3 个月前
- 此快照最后确认于
- 2025/12/03 04:11 3 个月前
本题两大难点:
-
意识到题目中的条件就是缩点后 0 入度 SCC 恰好只有一个;
-
熟练掌握 DAG 容斥技巧,以及《主旋律》一题的解法;
观察到 C 性质部分分很多,大概率是完整解法的一个重要部分。首先考虑 C 性质如何解决。
现在所有边权都相等,那么就和最小生成树无关了,只需要有任何一棵外向生成树,图就合法。考虑所有可能成为生成树根的节点,很自然地观察到这些点应当组成一个 SCC,否则无法互相到达。进一步地,这个 SCC 应当是缩点后图中唯一的 入度 SCC。因此我们现在转化目标,枚举集合 ,计算 中点恰好组成唯一合法 SCC 的方案数 。
发现计算一个点集强连通的方案数是不可避免的。不妨设这个方案数为 。这个问题就是《主旋律》,下面回顾一下这个问题的解法。
回忆 DAG 计数的过程:我们用“不断删除所有 入度点”的过程来刻画一个 DAG,并使用容斥系数 来处理每次删除的不一定是所有 入度点的问题。放到这个问题上同理,我们考虑设 表示将 划分成若干个 入度 SCC 的带权求和,系数为 。
考虑如何计算 ,我采用的方法或许和其他题解中略有区别。我们考虑对于 ,建立其所有导出子图和关于 的带权求和的双射。可以考虑如下等式:
其中 表示两端分别在 中的无向边数量(两个方向只算一次), 表示 内部的无向边数量。 可以用 计算。
这个等式成立的原因:两边都代表 的导出子图数量,右边相当于钦定 中均为 入度 SCC,剩下的边乱连。
那么移项之后,只需计算所有 即可推出 。初始化有 ,这部分时间复杂度为 。
接下来计算 。我们可以考虑用 之间的递推式解决:
( 的意义就是划分成若干个 SCC,互相不连边)
同理移项后可以表示出 ,时间复杂度也是 。
最后考虑如何计算答案。“恰好”的条件不好处理。考虑先做一步容斥:枚举 ,钦定 中的点组成了若干个合法 SCC。设 中的点组成了 个 SCC,那么相当于违反了 个限制,容斥系数为 。观察到这个系数就是 。
对于剩下的边,我们还有:
-
可以向 连边;
-
内部可以任意连边。
因此 对 的贡献即为 。
至此 C 性质被解决。时间复杂度 ,代码。
接下来考虑正解,这里才正式开始和最小生成树的条件对决。
考虑 Kruskal 的过程,我们从小到大合并连通块。显然无论生成树取了什么,在合并完所有 的边之后得到的连通性应当是相同的。同理,放到有向图上,弱连通性也得是相同的。
那么我们可以这样判断一张图是否合法:
从小到大扫描 ,维护目前每个联通块可能成为根的点集(下面称为根集)。加入所有权值为 的边时,尽可能合并所有的连通块,并更新根集。最后根集非空即为合法。
下面称连通块为大点,我们考虑大点之间的图。
考虑根集应当如何合并:我们称一条边是关键边,当且仅当其终点属于根集。那么显然只需要保留所有关键边,这些关键边应当存在大点之间的一棵外向生成树。那么新的根集就是可能成为大点外向树的根对应的大点的根集之并。
可能说起来比较绕。实际上就是找到所有可能成为大图中的树根的点,这些点对应的原连通块,找到这些连通块中可能是根的点,并起来就是新的根。
发现这实际上形如若干个 C 性质的问题并起来。因此类似考虑容斥,大体过程类似,区别在于:
-
在计算的时候,“不连边”的条件相当于没有关键边,因此需要考虑终点是非根节点的边;
-
在递推的时候,还需要考虑 和 之间的非关键边;
-
算答案的时候,要考虑 和 间的非关键边,以及 向 连的非关键边。
注意还有可能有无效的边(无论如何都不会在生成树里),给答案全局 即可。
时间复杂度还是 (参考其他题解证明),注意实现细节。代码。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...