【洛谷 B3611】【模板】传递闭包 题解(有向图+邻接矩阵+Floyd算法+传递闭包+位运算)

【模板】传递闭包

题目描述

给定一张点数为 n n n 的有向图的邻接矩阵,图中不包含自环,求该有向图的传递闭包。

一张图的邻接矩阵定义为一个 n × n n\times n n×n 的矩阵 A = ( a i j ) n × n A=(a_{ij})_{n\times n} A=(aij)n×n,其中

a i j = { 1 , i 到  j 存在直接连边 0 , i 到  j 没有直接连边 a_{ij}=\left\{ \begin{aligned} 1,i\ 到\ j\ 存在直接连边\\ 0,i\ 到\ j\ 没有直接连边 \\ \end{aligned} \right. aij={1,i  j 存在直接连边0,i  j 没有直接连边

一张图的传递闭包定义为一个 n × n n\times n n×n 的矩阵 B = ( b i j ) n × n B=(b_{ij})_{n\times n} B=(bij)n×n,其中

b i j = { 1 , i 可以直接或间接到达  j 0 , i 无法直接或间接到达  j b_{ij}=\left\{ \begin{aligned} 1,i\ 可以直接或间接到达\ j\\ 0,i\ 无法直接或间接到达\ j\\ \end{aligned} \right. bij={1,i 可以直接或间接到达 j0,i 无法直接或间接到达 j

输入格式

输入数据共 n + 1 n+1 n+1 行。

第一行一个正整数 n n n

2 2 2 n + 1 n+1 n+1 行每行 n n n 个整数,第 i + 1 i+1 i+1 行第 j j j 列的整数为 a i j a_{ij} aij

输出格式

输出数据共 n n n 行。

1 1 1 n n n 行每行 n n n 个整数,第 i i i 行第 j j j 列的整数为 b i j b_{ij} bij

样例 #1

样例输入 #1

4
0 0 0 1
1 0 0 0
0 0 0 1
0 1 0 0

样例输出 #1

1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1

提示

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 100 1\le n\le 100 1n100,保证 a i j ∈ { 0 , 1 } a_{ij}\in\{0,1\} aij{0,1} a i i = 0 a_{ii}=0 aii=0


思路

首先读取输入的点数n,并定义一个二维布尔数组a[N][N]来存储邻接矩阵。

接着,通过两层循环读取邻接矩阵的数据。这里的a[i][j]表示从点i到点j是否存在直接连边。

之后,利用Floyd-Warshall算法来求解传递闭包。这个算法的基本思想是:对于每一个点k,检查所有的点对(i, j),如果点i可以到达点k,并且点k可以到达点j,那么就可以认为点i可以到达点j。因此有a[i][j] |= (a[i][k] & a[k][j])

最后,再次通过两层循环输出更新后的邻接矩阵,即传递闭包。


AC代码

#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e3 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;ll n;
bool a[N][N];int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> a[i][j];}}for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {a[i][j] |= (a[i][k] & a[k][j]);}}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cout << a[i][j] << " ";}cout << "\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue】toRef,toRefs

toRef&#xff1a;把一个 响应式对象 转换为对应的ref变量toRefs&#xff1a;把一个 响应式对象 转换为对应的ref对象 代码 <template><P>mname: {{ mname }} </P><P>mage: {{ mage }} </P><P>msex: {{ msex }} </P><P>mhobb…

代码随想录算法训练营第三十九天| 62.不同路径、63. 不同路径 II

62.63 题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路…

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一&#xff1a;存储到数据库 性能存在瓶颈方式二&#xff1a;前端本地存储 localstorage在浏览器中存储 key/value 对&#xff0c;没有过期时间。s…

程序员为啥不自己单干?想过,但是

偶尔被问&#xff0c;程序员都能开发公司的软件了&#xff0c;为啥不做个软件自己卖。作为写了近10年代码的程序员&#xff0c;来分享一下这个话题。 据了解&#xff0c;每个程序员都想过去做一款自己的产品去赚钱&#xff0c;包括我。有人只是想过&#xff0c;有人去做过了&a…

配置VM开机自启动

1. 在此电脑-右键选择“管理”-服务和应用程序-服务中找到VMware Workstation Server服务&#xff08;新版名称也可能是VMware自启动服务&#xff0c;自己找一下&#xff0c;服务属性里有描述信息的&#xff09;&#xff0c;将其启用并选择开机自动启动 新版参考官方文档&…

蓝桥杯【第15届省赛】Python B组

这题目难度对比历届是相当炸裂的简单了…… A&#xff1a;穿越时空之门 【问题描述】 随着 2024 年的钟声回荡&#xff0c;传说中的时空之门再次敞开。这扇门是一条神秘的通道&#xff0c;它连接着二进制和四进制两个不同的数码领域&#xff0c;等待着勇者们的探索。 在二进制…

ReactRouter

React-Router 概念&#xff1a;一个路劲path对应一个组件component 当我们在浏览器中访问一个path的时候&#xff0c;path对应的组件会在页面中进行渲染路由语法&#xff1a; import {createBrowserRouter, RouterProvider} from react-router-dom// 1. 创建router实例对象并…

【算法刷题 | 回溯思想 02】4.12(电话号码的字母组合)

文章目录 4.电话号码的字母组合4.1问题4.2解法&#xff1a;回溯4.2.1回溯思路&#xff08;1&#xff09;函数返回值以及参数&#xff08;2&#xff09;终止条件&#xff08;3&#xff09;遍历过程 4.2.2代码实现 4.电话号码的字母组合 4.1问题 给定一个仅包含数字 2-9 的字符…

threejs 基础知识点汇总

threejs 基础知识点汇总 之前写了几篇博文&#xff0c;但是我觉得写的不好&#xff0c;我今天再补充一篇还不好的&#xff0c;把基础知识点汇总一下&#xff0c;不写运行的代码了&#xff0c;只写关键代码&#xff0c;但是看了之前我写的那几篇&#xff0c;看这篇的话问题其实不…

jdk17 你还想用ScriptEngineManager来执行js代码?

今天要用java来执行配置表的js代码&#xff0c;用 ScriptEngine javaScriptEngine new ScriptEngineManager().getEngineByName(“javascript”); 一直抛异常&#xff1a;Cannot invoke “javax.script.ScriptEngine.eval(String)” because “javaScriptEngine” is null 网上…

简单瞎搞题(位运算优化背包问题)

题目链接 这可不是瞎搞&#xff0c;出题人是有bear来。查资料时遇见的例题&#xff0c;当练习写一下。做法是位运算bitset优化的背包。 思路&#xff1a; 相当于有 n n n 组&#xff0c;每组选一个物品&#xff0c;然后问最后得到的重量之和是多少。不看位运算优化的话&…

Springboot集成Elastic-job

ElasticJob 通过弹性调度、资源管控、以及作业治理的功能&#xff0c;打造一个适用于互联网场景的分布式调度解决方案&#xff0c;并通过开放的架构设计&#xff0c;提供多元化的作业生态。 1 项目集成 1.1 springboot项目配置 导入依赖&#xff1a; <!--mysql连接基本配…

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后&#xff0c;在SpringBoot的resources文件夹里的application.properties会添加以下代码&#xff1a; server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页&#xff0c;链接中使默认…

【kears】keras使用介绍

文章目录 一.特点二.keras如何支持TensorFlow、CNTK 和 Theano2.1 使用 TensorFlow 后端引擎训练和评估模型2.2 使用 TensorFlow 后端引擎训练和评估模型2.3 使用 Theano后端引擎训练和评估模型2.4 不同深度学习框架如何选择 三.使用步骤3.1 导入库3.2 构建模型3.3 编译模型3.4…

【经验】java时区问题

首先得有一个预备知识 时间戳&#xff1a;指1970-01-01 00:00:00(GMT/UTC)起到当前的毫秒数。与时区无关&#xff0c;不同时区同一个时刻的时间戳是相同的。所以&#xff0c;时间戳不受时区影响。但是&#xff0c;不同时区的国家同一个时间戳显示的日期不同&#xff0c;所以同一…

解锁区块链技术的潜力:实现智能合约与DApps

在数字时代&#xff0c;区块链技术正迅速成为重塑多个行业的革命性力量。从金融服务到供应链管理&#xff0c;再到数字身份验证&#xff0c;区块链提供了一种去中心化、安全和透明的数据处理方式。在本文中&#xff0c;我们将深入探讨区块链技术&#xff0c;特别是智能合约和去…

LDRA Testbed软件静态分析_常见问题及处理

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

水经微图IOS版5.2.0发布

随时随地&#xff0c;微图一下&#xff01; 水经微图&#xff08;简称“微图”&#xff09;IOS新版已上线。 在该版本中主要新增图层树节点排序功能、常规&#xff08;矩形、圆、椭圆、扇形&#xff09;绘制功能、地形夸张等主要功能。 当前版本 当前版本号为&#xff1a;5…

c++容器:string的模拟实现

文章目录 定义命名空间和类构造函数拷贝构造析构函数返回string的大小和容量operator[]operator迭代器beginendreservepush_backappendoperatorinserterase 定义命名空间和类 namespace shh {class string{private:char* _str nullptr;size_t _size 0;size_t _capacity 0;}…

鹏哥C语言复习——数据存储

目录 版本差异&#xff1a; 数据类型&#xff1a; 进制表示&#xff1a; 大小端储存&#xff1a; 数据运算&#xff1a; 浮点型在内存中的存储&#xff1a; 版本差异&#xff1a; debug和release的区别&#xff1a; 在栈区开辟地址一般是先从高地址开辟 debug创建数组和单…