ARC163D Sum of SCC 题解

ARC163D

发现这个竞赛图一定能被分为两个集合 AB。满足 uA,vB,均有 uvE。答案就是划分这两个集合的方案数。

证明:

首先,竞赛图缩完点后一定是一条链,对强连通分量进行标号,满足编号小的强连通分量指向编号大的强连通分量。不妨令竞赛图 G 缩完点后的强连通分量编号分别为 a1,a2ak。则这个图 G 存在 ki 能分出两个满足条件的集合,即 {a1ai}{ai+1ak},i[1,k]。而分出的 k 种集合 AB 是与其形成双射关系的,故可转化。

这时就很好用动态规划求解了,定义 fi,j,k 表示 i 个点的竞赛图中,A 集合有 j 个点,有 k 条边满足 u<v 的方案数。

采用刷表法,考虑转移。

若第 i+1 个点在 A 中,内部有 c 条边连向 i+1(cj),则对 fi+1,j+1,k+c 产生贡献。

若第 i+1 个点在 B 中,内部有 c 条边连向 i+1(cij),则对 fi+1,j,k+j+c 产生贡献。

可得到方程:

fi+1,j+1,k+cfi+1,j+1,k+c+fi,j,k×(jc)

fi+1,j,k+j+cfi+1,j+1,k+j+c+fi,j,k×(ijc)

答案容易得到:i=0n1fn,i,m

时间复杂度:O(n5)

空间复杂度:O(n4)

评测记录

posted @   Pengzt  阅读(11)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示