【LeetCode:2316. 统计无向图中无法互相到达点对数 | BFS + 乘法原理】

news2024/11/19 7:42:25

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ BFS+ 乘法原理
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 2316. 统计无向图中无法互相到达点对数

⛲ 题目描述

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

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

在这里插入图片描述

在这里插入图片描述

提示:

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

🌟 求解思路&实现代码&运行结果


⚡ BFS+ 乘法原理

🥦 求解思路
  1. 题目让我们求解是从找到所有无法互相到达的不同点对数目,我们可以先找到每一个连通块的节点个数cnt,因为一共是n个节点,所以,剩下的不能到达的节点个数就是(n-cnt),所以,当前连通块中所有节点不能到达其它节点的个数是cnt * (n-cnt)-乘法原理。因为这只是一个连通块,其它情况类似,遍历下去,找到所有情况。
  2. 具体实现的时候,我们需要先建无向图,然后通过bfs求解,同时需要维护vis访问的节点的数组,避免重复访问。
  3. 最后,因为每个节点双向计算了两次。我们需要将结果/2来得到最终的结果。
  4. 具体求解的过程步骤请看下面代码。
🥦 实现代码
class Solution {
    public long countPairs(int n, int[][] edges) {
        long ans=0;
        ArrayList<Integer>[] list=new ArrayList[n]; 
        Arrays.setAll(list,e->new ArrayList<>());
        for(int[] edge:edges){
            int from=edge[0],to=edge[1];
            list[from].add(to);
            list[to].add(from);
        }
        Queue<Integer> queue=new LinkedList<>();
        boolean[] vis=new boolean[n];
        Arrays.fill(vis,false);
        for(int i=0;i<n;i++){
            if(!vis[i]){
                queue.add(i);
                vis[i]=true;
                int cnt=0;
                while(!queue.isEmpty()){
                    int size=queue.size();
                    for(int j=0;j<size;j++){
                        int cur=queue.poll();
                        cnt++;
                        for(int node:list[cur]){
                            if(!vis[node]){
                                queue.add(node);
                                vis[node]=true;
                            }
                        }
                    }
                }
                ans+=(long)(n-cnt)*cnt;
            }
        }
        return ans/2;
    }
}



🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

施密特正交化

相信大家在平时的期末考试中一定少不了对某某向量组执行标准正交化类型的题目。今天我们从这个题目入手&#xff0c;说明这个如何执行施密特正交化&#xff0c;以及为什么要进行正交化。 一、例子 例子&#xff1a;设 a 1 [ 1 2 − 1 ] a_1\begin{bmatrix}1\\2\\-1\end{bmat…

阿里妈妈Union Lab全量公测,你会用吗?

Union Lab是一种智能化的选品推荐、推广内容创作工具&#xff0c;它内置了大语言模型&#xff08;LLMs&#xff09;&#xff0c;使得选品、推广更加智能和简单。通过联盟底层货品服务&#xff0c;Union Lab可以实现智能化货品发现、分析、选品、投放、创意生产&#xff0c;基于…

嵌入式mqtt总线架构方案mosquitto+paho

一 mqtt通信模型 MQTT 协议提供一对多的消息发布&#xff0c;可以降低应用程序的耦合性&#xff0c;用户只需要编写极少量的应用代码就能完成一对多的消息发布与订阅&#xff0c;该协议是基于<客户端-服务器>模型&#xff0c;在协议中主要有三种身份&#xff1a;发布者&…

力扣第37题 解数独 c++ 难~ 回溯

题目 37. 解数独 困难 相关标签 数组 哈希表 回溯 矩阵 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫…

基于Java的文物管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

GRASP 、SOLID 与 GoF 设计模式

一、GRASP GRASP&#xff1a;通用职责分配软件设计模式(General Responsibility Assignment Software Patterns)&#xff0c;其主要思想是基于单一职责设计软件对象。 思考软件对象设计以及大型构件的流行方式是&#xff0c;考虑其职责、角色和协作。这是被称为职责驱动设计&a…

C++:无法查找或打开 PDB 文件?? 如何解决呢?以及产生原因是什么?

C:无法查找或打开 PDB 文件?? 如何解决呢&#xff1f;以及产生原因是什么&#xff1f; 前言解决办法原因 前言 最近博主在写C时&#xff0c;明明代码都正确&#xff0c;但编译失败。查看原因后发现显示&#xff1a;无法查找或打开 PDB 文件。&#xff08;先介绍解决办法&…

【高等数学】微分中值定理

文章目录 1、极值2、费马引理3、罗尔定理4、拉格朗日中值定理4.1用拉格朗日定理证明基本结论 5、柯西中值定理6、微分中值定理的意义7、三大中值定理的意义 1、极值 若 ∃ δ > 0 ∃δ>0 ∃δ>0&#xff0c;使得 ∀ x ∈ U ( x 0 , δ ) ∀x\in U(x_0,δ) ∀x∈U(x0…

DDD与微服务的千丝万缕

一、软件设计发展过程二、什么是DDD&#xff1f;2.1 战略设计2.2 战术设计2.3 名词扫盲1. 领域和子域2. 核心域、通用域和支撑域3. 通用语言4. 限界上下文5. 实体和值对象6. 聚合和聚合根 2.4 事件风暴2.5 领域事件 三、DDD与微服务3.1 DDD与微服务的关系3.2 基于DDD进行微服务…

2023年中国煤气节能器产量及市场规模分析[图]

煤气节能器行业是指生产和销售用于煤气燃烧系统中的节能器的行业。煤气节能器是一种能够有效提高煤气燃烧效率、降低燃烧过程中的热损失的装置&#xff0c;广泛应用于工业生产、民用燃烧等领域。煤气节能器行业的发展与煤气燃烧技术的发展密切相关&#xff0c;随着煤气燃烧技术…

操作系统期末复习题版详解(含解析)

操作系统期末复习 第一章 操作系统引论 一、Os具有哪几大特征?它们之间有何关系? 【参考答案】OS具有并发、共享、虚拟和异步这4个基本特征。它们之间的关系包含以下几个方面。 并发和共享是OS最基本的特征。为了提高计算机资源的利用率&#xff0c;OS必然要采用多道程序设…

Excel 5s内导入20w条简单数据(ExecutorType.BATCH)Mybatis批处理的应用

文章目录 Excel 5s内导入20w条数据1. 生成20w条数据1.1 使用Excel 宏生成20w条数据1.2 生成成功 2. ExecutorType&#xff1a;批量操作执行器类型2.1 ExecutorType.SIMPLE2.2 ExecutorType.BATCH2.3 ExecutorType.REUSE 3. 20w条数据直接插入数据库3.1 使用ExecutorType.SIMPLE…

成功解决ModuleNotFoundError: No module named ‘docx.text.hyperlink‘

成功解决ModuleNotFoundError: No module named docx.text.hyperlink 目录 解决问题 解决思路 解决方法 解决问题 ModuleNotFoundError: No module named ‘docx.text.hyperlink‘ 解决思路 No module named docx.text.hyperlink"。这个错误通常表示你的代码中缺少了…

react 中ref 属性的三种写法

目录 1. 字符串 ref 2.dom节点上使用回调函数ref 3.React.createRef() 1. 字符串 ref 最早的ref用法。&#xff08;由于效率问题&#xff0c;现在官方不推荐使用这种写法。&#xff09; 1.dom节点上使用&#xff0c;通过this.refs.xxxx来引用真实的dom节点 <input ref&q…

云上智能驾驶三维重建最佳实践

智能驾驶技术的不断发展&#xff0c;正在改变着我们的出行方式和交通系统。作为其中的一个关键技术&#xff0c;三维重建在智能驾驶系统中起着重要的作用。除去车端本身的感知、重建算法&#xff0c;自动驾驶技术的落地与发展需要庞大的云端重建能力支撑&#xff0c;火山引擎多…

魔术《4 Kings 折纸》的三重境界(二)——集合语言和数理逻辑

早点关注我&#xff0c;精彩不错过&#xff01; 上回我们回顾了《4 Kings 折纸》这个魔术的内容和用小学的奇偶性原理解析了操作的过程&#xff0c;详情请戳&#xff1a; 魔术《4 Kings 折纸》的三重境界&#xff08;一&#xff09;——奇偶性原理 今天我们进入后第二境界&…

C++入门篇2

文章目录 C入门篇21、函数重载1.1、函数重载概念1.2、 C支持函数重载的原理 -- 名字修饰(name Mangling) 2、引用2.1、引用概念2.2、引用特性2.3、常引用2.4、使用场景2.5、传值、传引用效率比较2.6、引用和指针的区别 3、内联函数3.1、内联函数概念3.2、内联函数特性 4、auto关…

代码随想录第四十五天|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 题目&#xff1a; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么…

绿肥红瘦专栏数据的爬取

前言 要想爬专栏&#xff0c;先得爬用户。要想爬用户&#xff0c;三个header参数挡住了去路&#xff1a;x-zst-81&#xff0c;x-zse-93&#xff0c;x-zse-96&#xff0c;经过搜索x-zse-96&#xff0c;定位到设置该字段的位置&#xff1a; 这个t2是固定的值&#xff0c;t0来自于…

Leetcode——字符

520. 检测大写字母 class Solution { public:bool detectCapitalUse(string word) {int big 0, small 0, len word.length();for (int i 0; i < len; i) {if (word[i] > 65 && word[i] < 90) {big;}else {small;}}if (big len || small len) {return tr…