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
    
            
    
            
    

      

  • 相关阅读:
    sort详解
    php之opcodes
    [转载] PHP升级导致系统负载过高问题分析
    Openresty实现获取内部location
    LUA语法汇总
    Openresty常用指令和参数
    PHP中的垃圾回收机制
    MySQL字段类型VARCHAR
    笔试题多线程
    笔试代码考查
  • 原文地址:https://www.cnblogs.com/lautsie/p/12269702.html
Copyright © 2011-2022 走看看