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

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,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.mzph.cn/news/112793.shtml

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

相关文章

大模型LLM相关面试题整理-PEFT

Prefix/Prompt-Tuning&#xff1a;在模型的输入或隐层添加 个额外可训练的前缀 tokens&#xff08;这些前缀是连续的伪 tokens&#xff0c;不对应真实的 tokens&#xff09;&#xff0c;只训练这些前缀参数&#xff1b; Adapter-Tuning&#xff1a;将较小的神经网络层或模块插入…

面试题 01.04. 回文排列

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;面试题 01.04. 回文排列 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 对字符串中各字符计数&#xff0c;若个数为奇数的字符个数大于 1&#xff0c;则不是回文排列&#xff0c;否则是。 …

uniapp 小程序优惠劵样式

先看效果图 上代码 <view class"coupon"><view class"tickets" v-for"(item,index) in 10" :key"item"><view class"l-tickets"><view class"name">10元优惠劵</view><view cl…

c++ 常见类内的关键字

1. override override 是一个关键字&#xff0c;用于显式地标记派生类中重写&#xff08;覆盖&#xff09;基类虚函数的意图。 override 并不会影响程序的执行结果&#xff0c;仅仅是作用于编译阶段&#xff0c;用于检查子类是否真的重写父类函数 作用&#xff1a; 帮助发现错…

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

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

Hive用户中文使用手册系列(一)

Apache Hive 在标题为“Information Platforms and the Rise of the Data Scientist”的文章一文中&#xff0c;Jeff Hammerbacher把“信息平台”描述为“企业摄取(ingest)、处理(process)、生成(generate)信息的行为”与“帮助加速从经验数据中学习”的“中心”。 在Facebook…

Linux之I2C应用编程

I2C-Tools的交叉编译 tar xvf i2c-tools-4.2.tar.xz 首先解压下压缩包 cd i2c-tools-4.2 进入 i2c-tools-4.2目录 make USE_STATIC_LIB1 执行 make 将i2cset ,i2cget ,i2cdump,i2cdetect,i2ctransfer放到板子上 命令直接操作IIC设备 命令行直接操作iic向AP3216C传感器获取数据…

即时通讯或者推送消息的守护进程?开启几个进程?

进程根据状态可以分为三种进程&#xff0c;守护进程&#xff0c;僵尸进程&#xff0c;孤儿进程。今天我们着重来分析下守护进程。 1.daemon? &#xff08;1&#xff09;概念 守护进程 (daemon) 是一类在后台运行的特殊进程&#xff0c;用于执行特定的系统任务。很多守护进程…

初出茅庐的小李博客之Windows11运行Linux记录

安装教程 超简单&#xff0c;不安装虚拟机&#xff0c;Windows11运行Linuxhttps://zhuanlan.zhihu.com/p/393484912 注意事项 出现错误有可能是少了驱动 驱动下载地址 https://link.zhihu.com/?targethttps%3A//wslstorestorage.blob.core.windows.net/wslblob/wsl_updat…

Django和jQuery,实现Ajax表格数据分页展示

1.需求描述 当存在重新请求接口才能返回数据的功能时&#xff0c;若页面的内容很长&#xff0c;每次点击一个功能&#xff0c;页面又回到了顶部&#xff0c;对于用户的体验感不太友好&#xff0c;我们希望当用户点击这类的功能时&#xff0c;能直接加载到数据&#xff0c;请求…

牛客网---活动运营刷题笔记

## 第一次 1.以下哪个活动玩法&#xff0c;不是为了给APP带来新增用户&#xff1f; A打折促销 B用户认证 C裂变活动 D有奖下载 正确答案&#xff1a;B 官方解析&#xff1a;本题主要考查活动拉新的方式 打折促销&#xff0c;即通过降低商品价格&#xff0c;促进商品销售&#…

安防视频监控系统EasyCVR视频汇聚存储平台定制化开发:新增kafka配置

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…

【算法训练-回溯算法 零】回溯算法解题框架

抽象地说&#xff0c;解决一个回溯问题&#xff0c;实际上就是遍历一棵决策树的过程&#xff0c;树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍&#xff0c;把叶子节点上的答案都收集起来&#xff0c;就能得到所有的合法答案。站在回溯树的一个节点上&#xff0c;你…

QT学习笔记-QT访问各种关系数据库笔记汇总

QT学习笔记-QT访问各种关系数据库笔记汇总 1、QT访问Oracle数据库2、QT访问SQLServer数据库3、QT访问MySQL数据库4、QT访问PostgreSQL数据库5、QT访问Access数据库6、QT多线程中访问数据库的要点 在使用QT进行应用开发过程中&#xff0c;不可避免的会涉及到访问关系数据库&…

协同过滤推荐算法UserCF、ItemCF

目录 相似度计算基于用户的协同过滤&#xff08;UserCF&#xff09;算法评估基于物品的协同过滤&#xff08;ItemCF&#xff09;协同过滤算法的权重改进协同过滤算法的问题分析思考学习参考 相似度计算 杰卡德&#xff08;Jaccard&#xff09;相似系数 Jaccard 系数是衡量两个…

js库——Day.js、Big.js

Day.js 方便操作对时间解析 验证 对时间进行计算等操作。 官方文档&#xff1a;https://dayjs.fenxianglu.cn npm i -S dayjs 1. 给定时间戳或者时间格式&#xff0c;获取格式化后的日期 dayjs(new Date()).format(YYYY-MM-DD HH:mm:ss) 2. 获取固定开始和固定结束的时间da…

在win10上安装配置Hadoop的环境变量

一、背景 在windows10系统中运行seatunnel 二、安装部署 2.1. 下载 Hadoop包 从 Apache Hadoop 官网下载最新版本的 Hadoop&#xff0c;版本号保持与服务端的Hadoop版本一致。 https://hadoop.apache.org/releases.htmlIndex of /apache/hadoop/core/hadoop-3.2.3/ 2.2. 解…

Qt文件对话框的使用

本文介绍Qt文件对话框的使用。 Qt编程中通常会遇到对文件的操作&#xff0c;比如打开&#xff0c;保存等&#xff0c;这些操作通常是通过文件对话框来进行操作的&#xff0c;文件对话框通常具有固定的样式&#xff0c;通过它可以获取到文件名&#xff0c;进而通过文件名打开文…

IntelliJ IDEA 2020.2.1白票安装使用方法

先安装好idear Plugins 内手动添加第三方插件仓库地址&#xff1a;https://plugins.zhile.io 搜索&#xff1a;IDE Eval Reset插件进行安装 输入https://plugins.zhile.io 手动安装离线插件方法 安装包可以去笔者的CSDN资源库下载 安装mybaties插件

【leetcode报错】 leetcode格式问题解决:error: stray ‘\302’ in program [solution.c]

leetcode格式问题解决 一、情景再现二、报错原因三、解决方法四、修正结果 一、情景再现 二、报错原因 该错误是指 源程序中有非法字符&#xff0c;需要将非法字符去掉。 一般是由于coder 1.使用中文输入法 或者 2.从别的地方直接复制粘贴代码 造成的。 代码中出现了 中文空格&…