Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for What Is Wrong With This Family? by Orthomonalus
def is_family(tree: list[list[str]]) -> bool:
# your code here
from collections import defaultdict, deque
parents = defaultdict(set)
children = set()
for parent, child in tree:
if child in parents and parent not in parents[child]:
return False
parents[child].add(parent)
children.add(child)
root_candidates = set(parent for parent, _ in tree) - children
if len(root_candidates) != 1:
return False
root = root_candidates.pop()
visited = set()
stack = deque([root])
while stack:
node = stack.pop()
if node in visited:
return False
visited.add(node)
for parent, child in tree:
if parent == node:
stack.append(child)
all_nodes = set(parent for parent, _ in tree).union(children)
return visited == all_nodes
print("Example:")
print(
is_family(
[
["Jack", "Mike"],
["Logan", "Mike"],
["Logan", "Jack"],
]
)
)
assert is_family([["Logan", "Mike"]]) == True
assert is_family([["Logan", "Mike"], ["Logan", "Jack"]]) == True
assert is_family([["Logan", "Mike"], ["Logan", "Jack"], ["Mike", "Alexander"]]) == True
assert is_family([["Logan", "Mike"], ["Logan", "Jack"], ["Mike", "Logan"]]) == False
assert is_family([["Logan", "Mike"], ["Logan", "Jack"], ["Mike", "Jack"]]) == False
assert (
is_family([["Logan", "William"], ["Logan", "Jack"], ["Mike", "Alexander"]]) == False
)
assert is_family([["Jack", "Mike"], ["Logan", "Mike"], ["Logan", "Jack"]]) == False
print("The mission is done! Click 'Check Solution' to earn rewards!")
Nov. 20, 2024