fork download
  1. def palindromePaths(tree_nodes, tree_from, tree_to, values, queries):
  2. from collections import defaultdict, deque
  3.  
  4. # Build adjacency list
  5. g = defaultdict(list)
  6. for u, v in zip(tree_from, tree_to):
  7. g[u].append(v)
  8. g[v].append(u)
  9.  
  10. # Precompute bitmask for each node using BFS/DFS
  11. mask = [0] * tree_nodes
  12. visited = [False] * tree_nodes
  13. visited[0] = True
  14. stack = [0]
  15.  
  16. # Set mask for root
  17. mask[0] = 1 << (ord(values[0]) - ord('a'))
  18.  
  19. while stack:
  20. u = stack.pop()
  21. for v in g[u]:
  22. if not visited[v]:
  23. visited[v] = True
  24. # XOR with character bit of v
  25. mask[v] = mask[u] ^ (1 << (ord(values[v]) - ord('a')))
  26. stack.append(v)
  27.  
  28. # Answer queries
  29. ans = []
  30. for q in queries:
  31. m = mask[q]
  32. # check ≤ 1 odd frequency
  33. if m & (m - 1) == 0:
  34. ans.append(1)
  35. else:
  36. ans.append(0)
  37.  
  38. return ans
  39.  
  40. print(palindromePaths(7, [0,1,2,2,4,4,7], [1,2,3,4,5,6], ['a', 'b', 'c', 'a', 'c','b', 'c'], [6,5,3]))
Success #stdin #stdout 0.11s 14140KB
stdin
Standard input is empty
stdout
[0, 1, 0]