每日算法系列【LeetCode 684】冗余连接

简介: 在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着 个节点(节点值不重复 )的树及一条附加的边构成。附加的边的两个顶点包含在 到 中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对 ,满足 ,表示连接顶点 和 的无向图的边。返回一条可以删去的边,使得结果图是一个有着 个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 应满足相同的格式.

题目描述


在本问题中, 树指的是一个连通且无环的无向图。

输入一个图,该图由一个有着  个节点(节点值不重复 )的树及一条附加的边构成。附加的边的两个顶点包含在  到  中间,这条附加的边不属于树中已存在的边。

结果图是一个以边组成的二维数组。每一个边的元素是一对  ,满足 ,表示连接顶点  和  的无向图的边。

返回一条可以删去的边,使得结果图是一个有着  个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边  应满足相同的格式 。

示例1

输入:
[[1,2], [1,3], [2,3]]
输出:
[2,3]
解释: 
1 / \2 - 3

示例2

输入:
[[1,2], [2,3], [3,4], [1,4], [1,5]]
输出:
[1,4]
解释:
5 - 1 - 2    |   |    4 - 3

提示

image.png



image.png下面讲两个常用的并查集优化。

image.png

代码


c++

classSolution {
public: 
staticconstintN=1010; 
intf[N], rank[N];
vector<int>findRedundantConnection(vector<vector<int>>&edges) 
    {    
init();  
for (autoe : edges) {     
intu=e[0], v=e[1];  
if (same(u, v)) return {u, v};  
elsejoin(u, v); 
        }      
return {-1, -1};
    }
voidinit() {   
for (inti=0; i<N; ++i) {   
f[i] =i;     
rank[i] =1;  
        }   
    }
intfind(intu) {  
returnu==f[u] ?u : f[u]=find(f[u]);
    }
voidjoin(intu, intv) {   
u=find(u);   
v=find(v);      
if (u==v) return;    
if (rank[u] <rank[v]) {  
f[u] =v;   
        } else {      
f[v] =u;   
if (rank[u] ==rank[v]) { 
rank[u]++;  
            }      
        }   
    }
boolsame(intu, intv) {  
u=find(u); 
v=find(v);    
returnu==v;  
    }
};

python

classSolution: 
deffindRedundantConnection(self, edges: List[List[int]]) ->List[int]:     
n=len(edges)      
self.f= [iforiinrange(n+1)]  
self.rank= [1] * (n+1)       
for [u, v] inedges:    
ifself.same(u, v):   
return [u, v]           
else:      
self.join(u, v)  
deffind(self, u):    
ifu==self.f[u]:   
returnuself.f[u] =self.find(self.f[u]) 
returnself.f[u]
defjoin(self, u, v): 
u, v=self.find(u), self.find(v)  
ifu==v:   
returnifself.rank[u] <self.rank[v]:
self.f[u] =velse:       
self.f[v] =uifself.rank[u] ==self.rank[v]:    
self.rank[u] +=1defsame(self, u, v):   
u, v=self.find(u), self.find(v)   
returnu==v

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
负载均衡 算法 5G
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
447 4
|
大数据 开发者 程序员
连接真实世界,高德地图背后的算法演进和创新
出行是生活的重要部分。我们都习惯了出门用导航,但一个导航App背后,需要什么样的数据和算法来支撑呢?算法又如何来推动出行体验的进步和创新呢?在阿里CIO学院攻“疫”技术公益大咖说的第十四场直播中高德地图首席科学家任小枫将为大家讲解高德地图背后的算法的演进和创新,分别从地图制作、搜索推荐、路径规划、时
11651 1
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
139 0
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
520 0
|
弹性计算 负载均衡 监控
加权最小连接数算法介绍
加权最小连接数算法介绍
637 6
|
算法 vr&ar
保持无损连接的BCNF分解算法
保持无损连接的BCNF分解算法
328 1
|
算法 Java vr&ar
保持无损连接和函数依赖的3NF合成算法(详细简介)期末必备
保持无损连接和函数依赖的3NF合成算法(详细简介)期末必备
289 0
|
人工智能 算法 BI
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
|
机器学习/深度学习 人工智能 算法
反向传播算法推导-全连接神经网络
反向传播算法是人工神经网络训练时采用的一种通用方法,在现代深度学习中得到了大规模的应用。全连接神经网络(多层感知器模型,MLP),卷积神经网络(CNN),循环神经网络(RNN)中都有它的实现版本。
2322 0
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于闪电连接过程优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于闪电连接过程优化的机器人路径规划算法- 附matlab代码

热门文章

最新文章