1 条题解
-
1赵青海 (huhe) LV 7 SU @ 2021-8-7 20:49:57
C++ :
#include <bits/stdc++.h> #define LL long long using namespace std; const int maxn=2*1e5+100; LL v[maxn],ver[maxn],edge[maxn],nextr[maxn],head[maxn],sum[maxn],trie[2][maxn*16]; int n,tot=1; inline LL read()//快速读入 { char ch=getchar(); int p=1,q=0; for(; ch!='-' && ch<'0' || ch>'9'; ch=getchar()); if (ch=='-') p=-p; for(; ch>='0' && ch<='9'; q=q*10+ch-'0',ch=getchar()); return p*q; } inline void add(int x,int y,int z){ ver[++tot] = y,edge[tot] = z; nextr[tot] = head[x],head[x] = tot; } inline void dfs(int x){ v[x] = 1; for (int i=head[x];i;i=nextr[i]){ if (!v[ver[i]]){ sum[ver[i]] = sum[x] ^ edge[i]; dfs(ver[i]); } } } inline void insert(int x){ int p = 1; for (int k=31;k>=0;k--){ int ch = x >>k &1; if (trie[ch][p] == 0) trie[ch][p] =++tot; p = trie[ch][p]; } } inline LL search(int x){ LL p = 1,ans = 0; for (int k=31;k>=0;k--){ int ch = x>>k&1; if (trie[ch^1][p]) { p = trie[ch^1][p]; ans|=(1<<k); }else{ p = trie[ch][p]; } } return ans; } int main(){ cin >> n; memset(v,0,sizeof(v)); for (int i=1;i<n;i++){ LL x,y,z; x = read(),y = read(),z = read(); x++,y++; add(x,y,z); add(y,x,z); } memset(sum,0,sizeof(sum)); dfs(1); tot =1; LL ans = 0; for (int i=1;i<=n;i++){ insert(sum[i]); ans = max(ans,search(sum[i])); } cout << ans ; }
- 1
信息
- ID
- 55
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 105
- 已通过
- 55
- 上传者