[算法学习笔记] 传递闭包
Description
Warning:本文只介绍传递闭包在 OI 中的简单应用。
传递闭包在 OI 中,一般用来处理图上点之间的连通性问题。它在图上体现在 原图上任意两个直接或者间接可达的点都连边。
在上图中,显然 \(\{1,2\}\{2,3\}\{1,3\}\) 均可达。在“传递闭包图”上如上三对点对都需要连边。
不难发现传递闭包可以通过 Floyd 算法求解。
Floyd 本质是枚举每个中转点 \(k\) ,对于 \(\forall i,j\) 。如果可以通过 \(k\) 中转可达,那就连边。
朴素 Floyd 算法是 \(O(n^3)\) 的,我们可以使用 bitset 优化。
这里给出 Floyd 算法求传递闭包模板:
Floyd 传递闭包
void floyd()
{
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
f[i][j] |=(f[i][k]&&f[k][j]);
}
}
}
}
接下来会给出几个简单应用。
Practise 1
题目给定 \(m\) 组大小关系,需要求有几个点的顺序确定。
我们只需要将大小关系建图,然后求解传递闭包。最后判断在传递闭包图上该点到图上其他点是否均可达即可。
持续更新。
本文作者:SXqwq,转载请注明原文链接:https://www.cnblogs.com/SXqwq/p/18077382
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!