题目链接在这里:P4551 最长异或路径 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

是一道比较经典的问题,对于异或问题经常会使用01trie树来解决。

当然01trie树只是用来统计答案,往往还需要一些预处理操作。

比如此题需要把从当前点到根节点的路径的异或和求出来,讨论与根节点的联系在树的问题中很常见。

 1 #include "bits/stdc++.h"
2 using namespace std;
3 const int MAX=1e6+5;
4 int n;
5 int tot,head[MAX],adj[MAX],nxt[MAX],wei[MAX];
6 int val[MAX];
7 void addedge(int u,int v,int w){
8 tot++;
9 adj[tot]=v;
10 wei[tot]=w;
11 nxt[tot]=head[u];
12 head[u]=tot;
13 }
14 void dfs(int x,int fa){
15 int i,j;
16 for (i=head[x];i;i=nxt[i]){
17 if (adj[i]==fa) continue;
18 val[adj[i]]=val[x]^wei[i];
19 dfs(adj[i],x);
20 }
21 }
22 struct Str{
23 int str[MAX][2],cnt;
24 bool vis[MAX];
25 Str(){
26 memset(str,0,sizeof(str));
27 cnt=0;
28 memset(vis,false,sizeof(vis));
29 }
30 void insert(int x){
31 int i,j,p=0;
32 bool zt;
33 for (i=30;i>=0;i--){
34 zt=(1<<i)&x;
35 if (str[p][zt]==0){
36 str[p][zt]=++cnt;
37 p=cnt;
38 }
39 else p=str[p][zt];
40 }
41 vis[p]=true;
42 }
43 int check(int v){
44 int i,j,p=0,ans=0;
45 bool zt;
46 for (i=30;i>=0;i--){
47 zt=v&(1<<i);
48 if (str[p][!zt]){
49 ans+=(1<<i);
50 p=str[p][!zt];
51 }
52 else p=str[p][zt];
53 // cout<<p<<endl;
54 }
55 // cout<<v<<' '<<ans<<endl;
56 return ans;
57 }
58 }ss;
59 int main(){
60 int i,j,u,v,w,ans=0;
61 scanf("%d",&n);
62 memset(head,0,sizeof(head));
63 memset(val,0,sizeof(val));
64 for (i=1;i<n;i++){
65 scanf("%d%d%d",&u,&v,&w);
66 addedge(u,v,w);
67 addedge(v,u,w);
68 }
69 dfs(1,0);
70 // for (i=1;i<=n;i++)
71 // cout<<i<<" : "<<val[i]<<endl;
72 for (i=1;i<=n;i++)
73 ss.insert(val[i]);
74 for (i=1;i<=n;i++)
75 ans=max(ans,ss.check(val[i]));
76 printf("%d\n",ans);
77 return 0;
78 }

最新文章

  1. iscroll双重滚动,向上滚动隐藏一部分,下拉后显示
  2. C++Promise函数
  3. JavaScript Patterns 5.5 Sandbox Pattern
  4. HIVE: UDF应用实例
  5. 模拟 POJ 1068 Parencodings
  6. 【转载】FLUNT温度场模拟
  7. H.264编码之IDCT变换原理
  8. 【转】android JNI
  9. Win7下Qt5.2中使用OpenGL的glu函数库无法使用的解决方案
  10. 你需要知道的12个Git高级命令
  11. 移动开发(webapp)过程中的小细节总结
  12. JQuery使用和选择器
  13. nopCommerce 3.9 大波浪系列 之 引擎 NopEngine
  14. .NET技术面试题系列(1) 基础概念
  15. 简单的同步Socket程序服务端
  16. Spring的原理性总结
  17. MySQL基础之 索引
  18. 20150117_js_设置时间的显示格式
  19. thinkjs 中增加过期时间
  20. Linux下mysql操作

热门文章

  1. adobe 色轮
  2. HttpClient详细使用示例(转)
  3. Jquery_001
  4. HTML复习(17.表格样式)
  5. css3边框属性学习
  6. Get Keys In Binary Tree Layer By Layer
  7. 22 BootStrapModelForm
  8. 启动appium服务时报错,服务不通:Original error: Could not find &#39;apksigner.jar&#39;
  9. 用python遍历一个图片文件夹,并输出所有路径到一个 txt 文件
  10. ssh scp 相关