Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution(object):
- def maximumInvitations(self, favorite):
- """
- :type favorite: List[int]
- :rtype: int
- """
- def findCycleLen(ele):
- if vis[ele]:
- return 1, ele#cycle len, cycle start
- vis[ele] = 1
- clen, clast = findCycleLen(favorite[ele])
- if ele == clast:
- self.res = max(self.res, clen)
- return clen+1, clast
- self.res = 0
- n = len(favorite)
- vis = [0]*n
- roots = set()
- for i in range(n):
- if favorite[favorite[i]] == i:
- roots.add(i)
- adj = [set() for _ in range(n)]
- for i in range(n):
- if i not in roots:
- adj[favorite[i]].add(i)
- for i in roots:
- d = 1
- st = deque((e, 2) for e in adj[i])
- while st:
- curr = st.pop()
- for e in adj[curr[0]]:
- st.append((e, curr[1]+1))
- d = max(d, curr[1])
- self.res += d
- for i in range(n):
- if not vis[i]:
- findCycleLen(i)
- return self.res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement