莫名其妙输出随机数
查看原帖
莫名其妙输出随机数
1047636
_ScreamBrother_楼主2025/8/1 21:46

rt,样例每次输入,结果都不一样,答案在500~600之间徘徊

#include <bits/stdc++.h>

int trie[2000010][2], v_xor[2000010], N, u, v, w, ans = -114514, tot;
std::vector < std::pair <int, int> > G[2000010];

void init(int node, int fa) {
	for (size_t i = 0; i < G[node].size(); i ++) {
		int now = G[node][i].first;
		if (now == fa) continue;
		v_xor[now] = v_xor[node] ^ G[now][i].second;
		init(now, node);
	}
}

void insert(int val) {
	int x = 0;
	for (int i = (1 << 30); i >= 1; i >>= 1) {
		int now = val & i;
		if (!trie[x][now]) trie[x][now] = ++tot;
		x = trie[x][now];
	}
}

int query(int val) {
	int x = 0, ret = 0;
	for (int i = (1 << 30); i >= 1; i >>= 1) {
		int now = val & i;
		if (trie[x][!now]) ret += i, x = trie[x][!now];
		else x = trie[x][now];
	}
	return ret;
}

int main() {
	std::cin >> N;
	for (int i = 1; i < N; i ++) 
		std::cin >> u >> v >> w, G[u].push_back({v, w}), G[v].push_back({u, w});
//	std::cout << v_xor[3];
	v_xor[1] = 0, init(1, 0);
	for (int i = 1; i <= N; i ++) insert(v_xor[i]);
	for (int i = 1; i <= N; i ++) ans = std::max(ans, query(v_xor[i]));
	
	std::cout << ans;
	return 0;
}
2025/8/1 21:46
加载中...