Python最后两个样例超时,看能否优化
import sys
sys.setrecursionlimit(100000)
n = int(input())
N, M = n + 10, n * 20
g = [[] for _ in range(N)]
d = [0 for _ in range(N)]
son, cnt = [[0 for _ in range(2)] for _ in range(M)], 0
def dfs(u, fa):
for j, w in g[u]:
if j != fa:
d[j] = d[u] ^ w
dfs(j, u)
def insert(x: int):
global cnt
p = 0
for i in range(30, -1, -1):
u = (x >> i) & 1
if not son[p][u]:
cnt += 1
son[p][u] = cnt
p = son[p][u]
def get_Max(x: int):
ans, p = 0, 0
for i in range(30, -1, -1):
u = (x >> i) & 1
if son[p][not u]:
ans += 1 << i
p = son[p][not u]
else:
p = son[p][u]
return ans
for _ in range(n - 1):
a, b, c = map(int, sys.stdin.readline().strip().split())
g[a].append([b, c])
g[b].append([a, c])
dfs(1, -1)
for i in range(1, n + 1):
insert(d[i])
Max = 0
for i in range(1, n + 1):
Max = max(Max, get_Max(d[i]))
print(Max)