首页 > 编程语言 >[算法学习笔记] 传递闭包

[算法学习笔记] 传递闭包

时间:2024-03-16 18:11:39浏览次数:31  
标签:闭包 连边 图上 笔记 传递 算法 Floyd

Description

Warning:本文只介绍传递闭包在 OI 中的简单应用。

传递闭包在 OI 中,一般用来处理图上点之间的连通性问题。它在图上体现在 原图上任意两个直接或者间接可达的点都连边。

image

在上图中,显然 \(\{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

P2419

题目给定 \(m\) 组大小关系,需要求有几个点的顺序确定。

我们只需要将大小关系建图,然后求解传递闭包。最后判断在传递闭包图上该点到图上其他点是否均可达即可。

持续更新。

标签:闭包,连边,图上,笔记,传递,算法,Floyd
From: https://www.cnblogs.com/SXqwq/p/18077382

相关文章

  • 0基础学《算法竞赛入门经典》持续更新
    前言3月10号开始准备蓝桥杯,4月13号比赛,仅有C语言语法基础。在此分享学习记录,于君共勉之。第二弹:0基础学《算法竞赛入门经典》第二版,作者:刘汝佳。已看完语法部分,3月15号开始,持续更新本书代码、晦涩知识点等的讲解,敬请期待,欢迎交流。第1部分语言篇第1章程序设计入门......
  • Taichi语言学习笔记-1
    Taichi语言学习笔记-1这个语言我在上大学的时候就听说过,以高性能著称,当时一个99行代码渲染冰雪奇缘的视频在b站上斩获了不小的播放量,那个时候我就想来尝试一下这个非常厉害的语言。不过到了今天,我才有充分的“理由”“不得不”学习这个语言,遂写下这篇文章,一方面促进自己学习,另一......
  • HMAC算法:数据传输的保护神
    title:HMAC算法:数据传输的保护神date:2024/3/1616:50:53updated:2024/3/1616:50:53tags:HMAC算法消息认证哈希函数密钥管理数据安全网络通信防篡改HMAC算法起源:HMAC(Hash-basedMessageAuthenticationCode)算法是由MihirBellare、RanCanetti和HugoKrawczyk......
  • 网络编程笔记目录
    网络编程笔记基础概念socket编程https://www.cnblogs.com/AndreaDO/p/18072371三次握手和四次挥手高并发服务器(多进程与多线程)https://www.cnblogs.com/AndreaDO/p/18073716selecthttps://www.cnblogs.com/AndreaDO/p/18074786poll和epollhttps://www.cnblogs.com/And......
  • 数据结构知识总结笔记------第四章:串(2)串的简单模式匹配算法、KMP算法、KMP算法的改进
    1、简单模式匹配算法对一个串中某子串的定位操作称为串的模式匹配,其中待定位的子串称为模式串。算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后续字符;否则从主串的第二个字符开始,再重新用上一步的方法与模式串中的字符做比较,以......
  • C++学习笔记——002
    在一个类里建立一个const时,不能给他初值:classfoo{public:foo():i(100){}private:constinti=100;//错误!!!};//可以通过这样的方式来进行初始化foo::foo():i(100){} classTest{public:Test():a(0){}enum{size1=100,size2=200};......
  • C++学习笔记——001
    C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++是C的一个超集,事实上,任何合法的C程序都是合法的C++程序。注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。 <>......
  • P3374 【模板】树状数组 动态求连续区间和 刷题笔记
    我们创建如下的树状数组来辅助操作该数组每个s[i]处于第几层取决于其二进制最后低位的1处于从右往左数第几列显然所有奇数的最右边一位都是1即其最低位的1处于右边第一列所以所有的奇数处于第一层而2,6,10,14的最低位1处于右边第二列 所以这些数处于第二层 8的最......
  • 日期问题 刷题笔记
    思路枚举19600101到20591231这个区间的数获得年月日 判断是否合法如果合法 关于题目给出的日期有三种可能年/月/日日/月/年月/日/年判断是否和题目给出的日期符合如果符合输出闰年{1.被4整除不被100整除  2.被400整除}补位写法“%02d" 如果不足两位......
  • [算法学习笔记] 差分约束
    Description一个差分约束系统是这样的。给定一组包含\(m\)个不等式,有\(n\)个不等式形如:\[\begin{cases}x_{c_1}-x_{c'_1}\leqy_1\\x_{c_2}-x_{c'_2}\leqy_2\\\cdots\\x_{c_m}-x_{c'_m}\leqy_m\end{cases}\]求任意一组可行解。Solution观察这个式子:\(x_{c1}-......