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

并查集(力扣2316)

这种涉及不同连通分量的,看上去就可以用并查集。并查集的模板请参见上一篇内容。并查集(力扣1971)-CSDN博客

现在我们要求的是无法互相到达的点对。根据观察易得,我们只需要求出每个并查集的元素数量,然后遍历每个点,设它所在的并查集元素数量为size,那么它所不能到达的点的数量就为n-size.最后除2即可。

class Solution
{
public:int find(vector<int>& father, int u){return u == father[u] ? u : father[u] = find(father, father[u]);}void join(vector<int>& father, int u, int v){u = find(father, u);v = find(father, v);if (u == v) return;father[v] = u;}long long countPairs(int n, vector<vector<int>>& edges){vector<int>father(n);for (int i = 0; i < n; i++)//并查集初始化{father[i] = i;}unordered_map<int, int>mp;//mp.first:并查集的根值  mp.second:集合中元素的数量for (auto p : edges){join(father,p[0], p[1]);}for (int i = 0; i < n; i++){int root = find(father, i);//找到节点i的根值mp[root]++;//mp[root]:以root为根的并查集的元素数量}long long ans = 0;//查询每一个点,看它所在的并查集中的元素的数量,设为size,则n-size是它不能访问到的节点的数量for (int i = 0; i < n; i++){int root = find(father, i);//找到它的根节点ans += (n - mp[root]);}return ans / 2;}
};


http://www.mrgr.cn/news/98756.html

相关文章:

  • 名胜古迹传承与保护系统(springboot+ssm+vue+mysql)含运行文档
  • 【Python】迭代器(Iterator)vs 生成器(Generator)
  • Python 实现日志备份守护进程
  • 从零到有的游戏开发(visual studio 2022 + easyx.h)
  • 华为OD机试真题——统计匹配的二元组个数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 华为OD机试真题——攀登者2(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • PyTorch学习-小土堆教程
  • 华为OD机试真题——天然蓄水库(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 猫咪如厕检测与分类识别系统系列【九】视频检测区域在线绘制+支持摄像头+网络摄像头+整体构建【上】
  • Web三漏洞学习(其二:sql注入)
  • 树莓派超全系列教程文档--(28)boot文件夹内容
  • 【论文阅读】UniAD: Planning-oriented Autonomous Driving
  • 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?
  • 华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 【Java学习笔记】运算符
  • oracle查询锁表和解锁
  • 理解计算篇--正则表达式转NFA--理论部分
  • 【Java学习笔记】数据类型转换
  • Linux-ftp tftp vsftpd区别
  • 11-算法打卡-链表-删除链表的倒数第N个节点-leetcode(19)-第十一天