• 684. 冗余连接——经典并查集题目


    684. 冗余连接

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

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

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

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

    示例 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
    

    注意:

    • 输入的二维数组大小在 3 到 1000。
    • 二维数组中的整数在1到N之间,其中N是输入数组的大小。
    class Solution(object):
        def findRedundantConnection(self, edges):
            """
            :type edges: List[List[int]]
            :rtype: List[int]
            """
            self.init(len(edges))
            ans = []
            for u,v in edges:
                is_success, e2 = self.connect(u, v)
                if not is_success:
                    ans = e2
            return ans
        
        def init(self, N):
            self.father = {}
            for i in range(1, N+1):
                self.father[i] = i
    
        def connect(self, u, v):
            f1 = self.find_father(u)
            f2 = self.find_father(v)
            if f1 == f2:
                return False, [u, v]
            else:
                self.father[f1] = f2
                return True, []
    
        def find_father(self, u):
            root = u
            path = []
            while self.father[root] != root:
                path.append(root)
                root = self.father[root]
            for p in path:
                self.father[p] = root
            return root
    
  • 相关阅读:
    HDU1263(map)
    Let the Balloon Rise HDU
    PAT甲级1007
    PAT乙级1041
    PAT乙级1037
    PAT乙级1031
    PAT乙级1025
    Hanoi(栈实现)
    《全球资产配置》读后感 读书笔记
    《与内心的恐惧对话》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/bonelee/p/12678756.html
Copyright © 2020-2023  润新知