当前位置: 首页 > news >正文

LC-2316. 统计无向图中无法互相到达点对数(DFS、并查集)

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

中等

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

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

示例 1:

在这里插入图片描述

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

示例 2:

img

输入: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
  • 不会有重复边。

DFS

class Solution {// 统计联通分量 个数 和 大小// 然后递推,求出点对个数// 例如 4 1 2// 4 * 1 + 5 * 2public long countPairs(int n, int[][] edges) {List<Integer>[] g = new ArrayList[n];Arrays.setAll(g, e -> new ArrayList<>());for(int[] e : edges){int x = e[0], y = e[1];g[x].add(y);g[y].add(x);}boolean[] vis = new boolean[n];List<Integer> list = new ArrayList<>();for(int i = 0; i < n; i++){if(!vis[i]){int cnt = dfs(i, -1, g, vis);list.add(cnt);}}long res = 0l, sum = 0l;for(Integer e : list){res += e * sum;sum += e;}return res;}private int dfs(int x, int fa, List<Integer>[] g, boolean[] vis){int res = 1;vis[x] = true;for(int y : g[x]){if(y != fa && !vis[y])res += dfs(y, x, g, vis);}return res;}
}

并查集

统计连通块大小可以用并查集做

class Solution {// 统计联通分量 个数 和 大小public long countPairs(int n, int[][] edges) {UF uf = new UF(n);for(int[] e : edges){uf.union(Math.max(e[0], e[1]), Math.min(e[0], e[1]));}Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < n; i++){map.merge(uf.find(i), 1, Integer::sum);}long res = 0l, sum = 0l;for(int x : map.keySet()){res += (long)map.get(x) * sum;sum += map.get(x);}return res;}
}/* ------------ 并查集模版 ------------ */
class UF {int[] parent; // par数组用来存储根节点,par[x]=y表示x的根节点为yint[] size; // size[i]表示以i为根的联通块大小int count; // count表示连通块个数,每次调用union时count-1public UF(int n) {this.count = n;parent = new int[n];size = new int[n];for (int i = 0; i < n; i++) {parent[i] = i;size[i] = 1;}}public void union(int x, int y) {int rootx = find(x);int rooty = find(y);if (rootx == rooty) return;else//不是同一个根,即不在同一个集合,就合并parent[rootx] = rooty;size[rooty] += size[rootx];count--;}public int find(int x) {// 路径压缩if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}
}

相关文章:

LC-2316. 统计无向图中无法互相到达点对数(DFS、并查集)

2316. 统计无向图中无法互相到达点对数 中等 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相…...

git笔记 - 常用记录

第1阶段 - Git简介 什么是Git及其重要性&#xff1f;基本的Git概念和术语 仓库&#xff08;Repository&#xff09;&#xff1a;也称为 repo&#xff0c;是存储代码和版本历史的地方。它可以是本地仓库&#xff08;在本地计算机上&#xff09;或远程仓库&#xff08;在服务器…...

无纸化办公小程序数据交互、wxs的使用

前言 很多同志们再写小程序的过程中&#xff0c;不知道该怎么发起HTTP请求到后端&#xff0c;在Web环境中发起HTTPS请求是很常见的&#xff0c;但是微信小程序是腾讯内部的产品&#xff0c;不能直接打开一个外部的链接。例如&#xff0c;在微信小程序中不能直接打开www.taobao…...

Python之哈希表-哈希表原理

Python之哈希表-哈希表原理 集合Set 集合&#xff0c;简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。Python中&#xff0c;它是可变的、无序的、不重复的元素的集合 初始化 set() -> new empty set objectset(iterable) -> new set …...

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例

标题sql server2014如何添加多个实例 前提&#xff08;已安装sql server2014 且已有默认实例MSSQLSERVER&#xff09; 添加新的实例 其实就是根据安装步骤再安装一次&#xff08;区别在过程中说明&#xff09; 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…...

C++ 智能指针常用总结

C 智能指针常用总结 文章目录 C 智能指针常用总结1. 写在对前面2. why 智能指针3. what 智能指针3.1 unique_ptr3.2 shared_ptr3.3 weak_ptr 3. how 指针指针3.1 unique_ptr3.1.1 创建3.1.2 成员函数 3.2 shared_ptr3.2.1创建3.2.2 成员对象 3.3 weak_ptr 4. 碎碎念5.参考资料 …...

OracleRAC 安装配置过程中的问题

OS RHAS 3.2 DB 9204 在RAC的安装配置过程中&#xff0c;虽然是严格仔细按照文档来实施&#xff0c;但还是出现不少问题&#xff0c;现整理出来。 现象一 &#xff1a; 在节点一安装数据库的时候出现以下错误 [oraclerac1 dbs]$ sqlplus "/nolog"SQL*Plus: Relea…...

基于战争策略优化的BP神经网络(分类应用) - 附代码

基于战争策略优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于战争策略优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.战争策略优化BP神经网络3.1 BP神经网络参数设置3.2 战争策略算法应用 4.测试结果…...

K8s 概念及组件

K8s 的全称为Kubernetes&#xff0c;是一种开源的容器编排平台&#xff0c;用于自动化部署以及扩展和管理容器化的应用程序&#xff0c;它提供了一种容器编排和管理的方式&#xff0c;可以帮助开发人员更轻松的管理容器化的应用程序&#xff0c;并且提供了一种跨多个主机的自动…...

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了&#xff0c;我在网上试了很多方法都没有效果&#xff0c;折让小编我很是苦恼&#xff0c;不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…...

计算机网络-计算机网络体系结构-网络层

目录 一、IPV4 IP数据报格式 *IP 数据报分片 *IPV4地址 分类 网络地址转换(NAT) 二、子网划分与子网掩码 *CIDR *超网 协议 ARP协议 DHCP协议 ICMP协议 三、IPV6 格式 IPV4和IPV6区别 地址表示形式 四、路由选择协议 RIP(路由信息协议) OPSF(开发最短路径优…...

60 最长有效括号

最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1…...

第17章 MQ(二)

17.11 RabbitMQ如何保证消息的顺序性 难度:★★ 重点:★★★ 白话解析 其实RabbitMQ是一个先进先出的队列,只要消息进入到队列之后那肯定是顺序的,其实这道题问的点就是在消息进队列之前和出队列之后如何保证顺序性。 1、要保证消息进队列的顺序性实际只需要保证生产者只…...

AV1 视频编码标准资源

AV1 视频编码标准资源 A Progress Report: The Alliance for Open Media and the AV1 Codec Alliance for Open Media(开放媒体联盟/AV1官网) aomanalyzer AOM ANALYZER TEST CLIPS(测试视频) (Download each of the the CIF clips found there, in YUV4MPEG (y4m) format…...

pycharm远程连接miniconda完整过程,以及遇到的问题解决

问题1&#xff1a;no-zero exit code(126) env: ‘/home/user2/miniconda3/envs/ihan/bin/python3’: Too many levels of symbolic links Python interpreter process exited with a non-zero exit code 126 因为选择的新建导致太多软连接&#xff0c;先在服务器上建好虚拟环…...

leetcode:2678. 老人的数目(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息&#xff0c;信息用长度为 15 的字符串表示&#xff0c;表示方式如下&#xff1a; 前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的年…...

【马蹄集】—— 概率论专题:第二类斯特林数

概率论专题&#xff1a;第二类斯特林数 目录 MT2224 矩阵乘法MT2231 越狱MT2232 找朋友MT2233 盒子与球MT2234 点餐 MT2224 矩阵乘法 难度&#xff1a;黄金    时间限制&#xff1a;5秒    占用内存&#xff1a;128M 题目描述 输入两个矩阵&#xff0c;第一个矩阵尺寸为 l…...

spring中基础核心接口总结

理解这几个接口&#xff0c;及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口 重要的实现类有&#xff1a;XmlBeanFactory,以及ApplicationContext接口下的类 2.Resource接口,可以通用地访问文件资源 1)ClassPathResource:读取…...

最新Tuxera NTFS2024破解版mac读写NTFS磁盘工具

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下&#xff0c;MacOSX只能实现对NTFS的读取功能&#xff0c;Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2024完美兼容最新版本的MacOS 11 Big Sur&#xff0c;在M1芯片…...

【标准化封装 SOT系列 】 E SOT-89

〇、SOT-89 这个封装也比较常见&#xff0c;但并不易错。 一、E部分 SOT-89 参数 pin-pin 间距1.5mm body size 4.52.5 二、符合当前标准的典型举例 名称pin 数厂家 body DE矩形 (mm)SOT-894Mini-Circuits – PGA-102 — 4.39/4.62.29/2.59 上图 MiniCircuits 也称DF78…...

高中五大联赛中的高校认可度与专业选择优势排名

根据当前&#xff08;2026年4月&#xff09;最新公开资料&#xff0c;高中“五大联赛”&#xff08;即数学、物理、化学、生物、信息学五大学科奥林匹克竞赛&#xff09;在‌高校认可度‌与‌专业选择优势‌方面的排名如下&#xff1a; ‌一、高校认可度排名‌ 综合强基计划、…...

std::string vs std::string_view

std::string vs std::string_view 详解 std::string_view 是 C17 引入的一个非拥有、只读的字符串视图。 它常被拿来和老牌的 std::string 做对比 —— 二者表面看起来很像&#xff0c;但语义、所有权、生命周期完全不同。用得好能大幅提升性能&#xff0c;用得不好就是悬空引用…...

基于RAG与向量数据库的学术论文智能对话系统构建实战

1. 项目概述&#xff1a;当学术论文遇见智能对话如果你也和我一样&#xff0c;常年泡在arXiv、ACL、NeurIPS这些论文库里&#xff0c;那你肯定懂那种感觉&#xff1a;面对一篇动辄十几页、公式图表满篇的PDF&#xff0c;想快速抓住核心思想、理清方法脉络、甚至找到代码实现&am…...

朋友家信号差,我用手机和Python脚本‘借’了个网:记一次小米路由器4A千兆版的WIFI渗透与提权实战

从访客到管理员&#xff1a;一次小米路由器4A千兆版的趣味网络探索 朋友新搬了家&#xff0c;邀请我去做客。刚进门就发现手机信号只有可怜的一格&#xff0c;刷个朋友圈都要转半天。朋友不好意思地笑笑&#xff1a;"这小区信号一直不好&#xff0c;要不你连我家WiFi吧&am…...

保姆级教程:用Arduino和三个电感实现智能车归一化循迹(附完整代码与调试心得)

从零搭建智能车循迹系统&#xff1a;Arduino电感归一化实战指南 当你第一次把三个电感传感器排列在智能车前端时&#xff0c;那些不断跳动的模拟值可能会让你感到困惑——左边的电感在金属导线附近显示512&#xff0c;中间的687&#xff0c;右边的突然飙到1023。这些原始数据就…...

终极安卓短信备份指南:如何用SMS Backup+永久保护你的通信记录

终极安卓短信备份指南&#xff1a;如何用SMS Backup永久保护你的通信记录 【免费下载链接】sms-backup-plus Backup Android SMS, MMS and call log to Gmail / Gcal / IMAP 项目地址: https://gitcode.com/gh_mirrors/sms/sms-backup-plus 你是否曾经因为手机丢失、损坏…...

数字记忆管家:三步构建你的个人AI数据资产库

数字记忆管家&#xff1a;三步构建你的个人AI数据资产库 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...

保姆级教程:用Huggingface Hub命令行工具上传你的第一个PyTorch模型(含大文件LFS配置)

从零到一&#xff1a;Huggingface Hub命令行高效部署PyTorch模型全指南 当你完成了一个PyTorch模型的训练&#xff0c;下一步自然是想把它分享给社区或者团队成员。Huggingface Hub作为模型托管平台&#xff0c;提供了完整的命令行工具链&#xff0c;让开发者能够高效地上传和管…...

多元多步多站点时间序列预测在空气质量监测中的应用

1. 多元多步多站点时间序列预测问题概述时间序列预测在实际应用中面临着诸多挑战&#xff0c;这些挑战源于问题的复杂性特征&#xff1a;多输入变量、需要预测多个时间步长&#xff0c;以及需要对多个物理站点进行相同类型的预测。这类问题在空气质量预测、交通流量预测、电力负…...

从‘狼人杀’到推荐算法:贝叶斯定理如何悄悄成为你手机里的预言家?

从‘狼人杀’到推荐算法&#xff1a;贝叶斯定理如何悄悄成为你手机里的预言家&#xff1f; 深夜的狼人杀桌游中&#xff0c;当3号玩家突然质疑5号"昨晚为什么守我"时&#xff0c;老手们会不自觉调整对其他玩家的信任值——这种动态变化的"怀疑度"&#xff…...