Advertisement
DeepRest

Maximum Employees to Be Invited to a Meeting

Jan 2nd, 2022 (edited)
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.25 KB | None | 0 0
  1. class Solution(object):
  2.     def maximumInvitations(self, favorite):
  3.         """
  4.        :type favorite: List[int]
  5.        :rtype: int
  6.        """
  7.         def findCycleLen(ele):
  8.             if vis[ele]:
  9.                 return 1, ele#cycle len, cycle start
  10.  
  11.             vis[ele] = 1
  12.             clen, clast = findCycleLen(favorite[ele])
  13.        
  14.             if ele == clast:
  15.                 self.res = max(self.res, clen)
  16.  
  17.             return clen+1, clast
  18.        
  19.         self.res = 0
  20.         n = len(favorite)
  21.         vis = [0]*n
  22.        
  23.         roots = set()
  24.         for i in range(n):
  25.             if favorite[favorite[i]] == i:
  26.                 roots.add(i)  
  27.        
  28.         adj = [set() for _ in range(n)]
  29.         for i in range(n):
  30.             if i not in roots:
  31.                 adj[favorite[i]].add(i)
  32.        
  33.         for i in roots:
  34.             d = 1
  35.             st = deque((e, 2) for e in adj[i])
  36.             while st:
  37.                 curr = st.pop()
  38.                 for e in adj[curr[0]]:
  39.                     st.append((e, curr[1]+1))  
  40.                 d = max(d, curr[1])
  41.             self.res += d
  42.  
  43.         for i in range(n):  
  44.             if not vis[i]:
  45.                 findCycleLen(i)
  46.        
  47.         return self.res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement