zoukankan      html  css  js  c++  java
  • [leetcode]Redundant Connection II

    用了并查集,分成有入度为2以及有环两种情况。

    class Solution:
        def findRedundantDirectedConnection(self, edges: List[List[int]]) -> List[int]:
            n = len(edges)
            indegrees = {k + 1: 0 for k in range(n)}
            for u, v in edges:
                indegrees[v] += 1
            
            for i in range(n - 1, -1, -1):
                u, v = edges[i]
                if indegrees[v] == 2 and self.validTreeExceptN(edges, i):
                    return edges[i]
    
            for i in range(n - 1, -1, -1):
                u, v = edges[i]
                if indegrees[v] == 1 and self.validTreeExceptN(edges, i):
                    return edges[i]
    
            return None
    
        def validTreeExceptN(self, edges, n):
    
            def find(fa, i):
                if fa[i] != i:
                    fa[i] = find(fa, fa[i])
                return fa[i]
    
            def union(fa, i, j):
                fa[j] = find(fa, i)
    
            # union-find set
            fa = [0] * (len(edges) + 1)
            for i in range(len(fa)):
                fa[i] = i
    
            # valid tree with out edge n
            cnt = len(edges)
            for i in range(len(edges)):
                if i == n:
                    continue
                
                u, v = edges[i]
                fu = find(fa, u)
                fv = find(fa, v)
                if fu != fv:
                    union(fa, v, u)
                    cnt -= 1
            
            return cnt == 1
    
            
    
            
    

      

  • 相关阅读:
    求助
    第五次作业
    第四次作业
    第三次作业
    第二次作业(四则运算)
    关于软件工程相关疑问
    小组成员名单()
    第四次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/lautsie/p/12269702.html
Copyright © 2011-2022 走看看