全WA?
查看原帖
全WA?
701221
Chr0n1CleC楼主2022/9/10 10:40
#include<stdio.h>
#define N 100009

const int LOG = 1 << 30;

int head[N], cnt;

struct node
{
	int v, w, nxt;
}e[N << 1];

inline void add(int u, int v, int w)
{
	e[++ cnt].v = v, e[cnt].w = w, e[cnt].nxt = head[u], head[u] = cnt;
}

struct trie
{
	int ch[N << 5][2], tot;
	trie()
	{
		tot = 0;
	}
	inline void add(int x)
	{
		int u = 0;
		for (int i = LOG;i;i >>= 1)
		{
			bool v = x & i;
			if (!ch[u][v])
					ch[u][v] = ++ tot;
			u = ch[u][v];
		}
	}
	inline int query(int x)
	{
		int u = 0, ret = 0;
		for (int i = LOG;i;i >>= 1)
		{
			bool v = x & i;
			if (ch[u][!v])
				ret += i, u = ch[u][!v ^ 1];
			else
				u = ch[u][v];
		}
		return u;
	}
}T;

int val[N];

void dfs(int u, int fa)
{
	for (int i = head[u];i;i = e[i].nxt)
		if (e[i].v != fa)
		{
			val[e[i].v] = val[u] ^ e[i].w;
			dfs(e[i].v, u);
		}
}

inline int max(int a, int b) {return a > b ? a : b;}

int main()
{
	int n;
	scanf("%d", &n);
	int u, v, w;
	for (int i = 1;i < n;++ i)
		scanf("%d%d%d", &u, &v, &w), add(u, v, w), add(v, u, w);
	dfs(1, 0);
	for (int i = 1;i <= n;++ i)
			T.add(val[i]);
	int ans = -1e9;
	for (int i = 1;i <= n;++ i)
		ans = max(ans, T.query(val[i]));
	printf("%d", ans);
	
	return 0;
}
2022/9/10 10:40
加载中...