class Solution:
def killProcess(self, pid: List[int], ppid: List[int], kill: int) -> List[int]:
"""tc O(N) sc O(N)
main idea: hashmap to record parent -> child relation + BFS get kill process's children
"""
children = collections.defaultdict(list)
# 1. build parent -> child tree, find root
for parent, child in zip(ppid,pid):
children[parent].append(child)
res = [kill] # include self
if children[0] == kill:return pid # optimization
# BFS
q = collections.deque()
for each in children[kill]:
q.append(each)
while q:
cur = q.popleft()
res.append(cur)
for each in children[cur]:
q.append(each)
return res