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

leetcode:冗余连接 II[并查集检查环][节点入度]

学习要点

  1. 并查集检查环
  2. 分类讨论

题目链接

        685. 冗余连接 II - 力扣(LeetCode)

题目描述

解法:并查集检查环

class Solution {
public:int Find_Root(vector<int>& v_root, int pos) {while (v_root[pos] > 0) {pos = v_root[pos];}return pos;}bool Is_Tree(vector<vector<int>>& edges, pair<int, int> pair1_edg_rudu2) {vector<int> v_root( edges.size() + 1, -1);for (int i = 0; i < edges.size(); i++) {if (edges[i][0] == pair1_edg_rudu2.first &&edges[i][1] == pair1_edg_rudu2.second) {continue;}int root1 = Find_Root(v_root, edges[i][0]);int root2 = Find_Root(v_root, edges[i][1]);if (root1 != root2) {v_root[edges[i][1]] = root1;} else {return false;}}return true;}vector<int> findRedundantDirectedConnection(vector<vector<int>>& edges) {// 标记入度为2的点int n = edges.size();vector<int> v_find_rudu(n + 1, 0);for (int i = 0; i < edges.size(); i++) {v_find_rudu[edges[i][1]]++;}// 寻找入度为2的点int point_rudu2 = -1;for (int i = 1; i < n + 1; i++) {if (v_find_rudu[i] == 2) {point_rudu2 = i;}}// 如果不存在入度为2的点:并查集解法vector<int> v_root( edges.size() + 1, -1);if (point_rudu2 == -1) {for (int i = 0; i < edges.size(); i++) {int root1 = Find_Root(v_root, edges[i][0]);int root2 = Find_Root(v_root, edges[i][1]);if (root1 != root2) {v_root[edges[i][1]] = root1;} else {return vector<int>{edges[i][0], edges[i][1]};}}return vector<int>();}// 如果存在入度为2的点else {// 倒序寻找这个边pair<int, int> pair1_edg_rudu2;pair<int, int> pair2_edg_rudu2;bool flag1 = true;for (int i = n - 1; i >= 0; i--) {if (flag1 && edges[i][1] == point_rudu2) {pair1_edg_rudu2.first = edges[i][0];pair1_edg_rudu2.second = edges[i][1];flag1 = false;continue;}if (flag1 == false && edges[i][1] == point_rudu2) {pair2_edg_rudu2.first = edges[i][0];pair2_edg_rudu2.second = edges[i][1];break;}}bool is_pair1 = Is_Tree(edges, pair1_edg_rudu2);if (is_pair1) {return vector<int>{pair1_edg_rudu2.first,pair1_edg_rudu2.second};} else {return vector<int>{pair2_edg_rudu2.first,pair2_edg_rudu2.second};}}}
};

http://www.dtcms.com/a/286159.html

相关文章:

  • Android 之 audiotrack
  • 协作机器人操作与编程-PE系统示教编程和脚本讲解(直播回放)
  • 多模态大模型重构人机交互,全感官时代已来
  • PPIO × Lemon AI:一键解锁全流程自动化开发能力
  • Rust交叉编译自动化实战
  • 服务器内存满了怎么清理缓存?
  • 【DPDK】高性能网络测试工具Testpmd使用指南
  • ARINC818航空总线机载视频处理系统设计
  • 第一篇htmlcss详细讲解
  • 铁路基础设施无人机巡检技术及管理平台
  • 基于R、Python的Copula变量相关性分析及AI大模型应用
  • Altera Quartus:BAT批处理实现一键sof文件转换为jic文件
  • Altera Quartus:编译完成后自动生成pof文件
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十二课——图像直方图统计的FPGA实现
  • 28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
  • 开源Docmost知识库管理工具
  • Win11安装Docker,并使用Docker安装RabbitMQ
  • 智能算法优化储能系统充放电策略
  • 基于R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
  • 指定阿里镜像原理
  • 创建线程的方式有哪些?相比继承Thread类,实现Runable接口的好处是什么?
  • 线上 CPU 过高怎么排查
  • mac系统安装、启动Jenkins,创建pytest接口自动化任务
  • 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
  • 力扣面试150(33/150)
  • 事务处理与AOP(web后端笔记第四期)
  • linux 脚本解释
  • 数据库防止数组字符串序列化
  • 后端参数校验
  • 20250718-FDU-HDUOJ钉耙编程一