LeetCode 2316. 统计无向图中无法互相到达点对数::广度优先搜索(BFS)

本文主要是介绍LeetCode 2316. 统计无向图中无法互相到达点对数::广度优先搜索(BFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【LetMeFly】2316.统计无向图中无法互相到达点对数:广度优先搜索(BFS)

力扣题目链接:https://leetcode.cn/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/

给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。

请你返回 无法互相到达 的不同 点对数目 。

 

示例 1:

输入:n = 3, edges = [[0,1],[0,2],[1,2]]
输出:0
解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0 。

示例 2:

输入:n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]]
输出:14
解释:总共有 14 个点对互相无法到达:
[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[1,5],[2,3],[2,6],[3,4],[3,5],[3,6],[4,6],[5,6]]
所以我们返回 14 。

 

提示:

  • 1 <= n <= 105
  • 0 <= edges.length <= 2 * 105
  • edges[i].length == 2
  • 0 <= ai, bi < n
  • ai != bi
  • 不会有重复边。

方法一:广度优先搜索BFS

这道题的关键就是统计出每个子图的大小。假设原图是由大小为abc的三个子图构成的,那么答案 a n s = a × ( b + c ) + b × ( a + c ) + c × ( a + b ) = a × ( n − a ) + b × ( n − b ) + c × ( n − c ) ans = a\times(b + c) + b\times(a+c)+c\times(a+b) = a\times (n-a)+b\times(n-b)+c\times(n-c) ans=a×(b+c)+b×(a+c)+c×(a+b)=a×(na)+b×(nb)+c×(nc)

怎么统计出每个子图有多少个节点呢?广搜一遍就行了。使用visited数组来记录哪个节点被遍历过,从 0 0 0 n − 1 n-1 n1枚举,遇到没遍历过的节点就开始广搜,统计这个子图的节点个数并标记处理过的节点。

  • 时间复杂度 O ( n + l e n ( e d g e s ) ) O(n + len(edges)) O(n+len(edges))
  • 空间复杂度 O ( n + l e n ( e d g e s ) ) O(n + len(edges)) O(n+len(edges))

AC代码

C++
typedef long long ll;
class Solution {
public:ll countPairs(int n, vector<vector<int>>& edges) {vector<vector<int>> graph(n);for (auto& v : edges) {graph[v[0]].push_back(v[1]);graph[v[1]].push_back(v[0]);}vector<ll> sizes;vector<bool> visited(n);for (int i = 0; i < n; i++) {if (visited[i]) {continue;}int cntNode = 0;visited[i] = true;queue<int> q;q.push(i);while (q.size()) {int thisNode = q.front();cntNode++;q.pop();for (int t : graph[thisNode]) {if (!visited[t]) {visited[t] = true;q.push(t);}}}sizes.push_back(cntNode);}ll ans = 0;for (ll t : sizes) {ans += t * (n - t);}return ans / 2;}
};
Python
# from typing import Listclass Solution:def countPairs(self, n: int, edges: List[List[int]]) -> int:graph = [[] for _ in range(n)]for a, b in edges:graph[a].append(b)graph[b].append(a)visited = [False] * nsizes = []for i in range(n):if visited[i]:continuecntNode = 0visited[i] = Trueq = [i]while q:thisNode = q.pop()cntNode += 1for t in graph[thisNode]:if not visited[t]:visited[t] = Trueq.append(t)sizes.append(cntNode)ans = 0for t in sizes:ans += t * (n - t)return ans // 2

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/133962709

这篇关于LeetCode 2316. 统计无向图中无法互相到达点对数::广度优先搜索(BFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255986

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以