题意 :  一颗树,每个边有个值,在树上找一条简单路径,使得这条路径上的边权异或值最大
先找到所有节点到一点的距离 , 显然dis( x , y ) = dis( z , x )^dis( z , y )
那么把所有的距离都以二进制由高到低存到trie中 , 扫一遍每个点 , 在trie树上由高到低找某位与该点某位相反的数 , 找不到则妥协找下一位 , 如此贪心即可 
写的时候超空间一次re两次,trie树的大小设置为30*n刚好,不要想太多设置太大或者因为走极端设置得过小...就按数据量设置就可以...
代码
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<queue>
  7. using namespace std;
  8. const int maxn=;
  9. const double eps=1e-;
  10. const long long modn=;
  11. int n;
  12. int ans=;
  13. struct nod{
  14. int y;
  15. int next;
  16. int v;
  17. }e[maxn*];
  18. int head[maxn]={},tot=;
  19. int dis[maxn]={};
  20. struct tri{
  21. bool exist;
  22. int v;
  23. int next[];
  24. }a[maxn*];
  25. int tot1=;
  26. void init(int x,int y,int z){
  27. e[++tot].y=y;
  28. e[tot].v=z;
  29. e[tot].next=head[x];
  30. head[x]=tot;
  31. }
  32. void doit(int x,int v,int k){
  33. if(k<){
  34. a[x].exist=;
  35. a[x].v=v;
  36. return;
  37. }int z;
  38. if(v&(<<k)){
  39. z=;
  40. }else{
  41. z=;
  42. }
  43. if(!a[x].next[z]){
  44. a[x].next[z]=++tot1;
  45. }doit(a[x].next[z],v,k-);
  46. }
  47. void getit(int x,int v,int k){
  48. if(k<){
  49. int z=v^a[x].v;
  50. ans=max(ans,z);
  51. return;
  52. }int z;
  53. if(v&(<<k)){
  54. z=;
  55. }else{
  56. z=;
  57. }
  58. if(!a[x].next[z]){
  59. z=^z;
  60. }getit(a[x].next[z],v,k-);
  61. }
  62. void dfs(int x,int fa,int val){
  63. int y,v,z;
  64. for(int i=head[x];i;i=e[i].next){
  65. y=e[i].y;
  66. v=e[i].v;
  67. if(y!=fa){
  68. z=val^v;
  69. dis[y]=z;
  70. dfs(y,x,z);
  71. }
  72. }
  73. }
  74. void yu(){
  75. memset(a,,sizeof(a));
  76. memset(e,,sizeof(e));
  77. memset(head,,sizeof(head));
  78. tot1=tot=;
  79. memset(dis,,sizeof(dis));
  80. ans=;
  81. }
  82. int main(){
  83. while(~scanf("%d",&n)){
  84. yu();
  85. int x,y,z;
  86. for(int i=;i<n;i++){
  87. scanf("%d%d%d",&x,&y,&z);
  88. init(x+,y+,z);
  89. init(y+,x+,z);
  90. }
  91. dfs(,,);
  92. for(int i=;i<=n;i++){
  93. getit(,dis[i],);
  94. doit(,dis[i],);
  95. }
  96. printf("%d\n",ans);
  97. }
  98. return ;
  99. }

POJ 3764 The xor-longest Path trie树解决位运算贪心的更多相关文章

  1. Poj 3764 The xor-longest Path(Trie树+xor+贪心)

    The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6455 Accepted: 1392 ...

  2. 【POJ 3764】 The xor-longest path

    [题目链接] http://poj.org/problem?id=3764 [算法] 首先,我们用Si表示从节点i到根的路径边权异或和 那么,根据异或的性质,我们知道节点u和节点v路径上的边权异或和就 ...

  3. 【bzoj1954】Pku3764 The xor-longest Path Trie树

    题目描述  给定一棵n个点的带权树,求树上最长的异或和路径 输入 The input contains several test cases. The first line of each test ...

  4. POJ3764 The xor-longest path Trie树

    代码写了不到30分钟,改它用了几个小时.先说题意,给你一颗树,边上有权,两点间的路径上的路径的边权抑或起来就是路径的xor值,要求的是最大的这样的路径是多少.讲到树上的两点的xor,一个常用的手段就是 ...

  5. HDU 4825 Xor Sum (trie树处理异或)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  6. HDU4825 Xor Sum(字典树解决最大异或问题)

    Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整 ...

  7. POJ-2777-CountColor(线段树,位运算)

    链接:https://vjudge.net/problem/POJ-2777#author=0 题意: Chosen Problem Solving and Program design as an ...

  8. poj3764 The XOR Longest Path【dfs】【Trie树】

    The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10038   Accepted:  ...

  9. 【POJ 3764】The Xor-longest Path

    题目 给定一个\(n\)个点的带权无根树,求树上异或和最大的一条路径. \(n\le 10^5\) 分析 一个简单的例子 相信大家都做过这题: 给定一个\(n\)个点的带权无根树,有\(m\)个询问, ...

随机推荐

  1. 查询timestamp类型数据

    $where=" roleid = 8 and lizhi = 0 and branchid IN (".implode(",",$ids).") a ...

  2. CodeForces - 1004B

    Sonya decided to organize an exhibition of flowers. Since the girl likes only roses and lilies, she ...

  3. 【洛谷 P3705】 [SDOI2017]新生舞会(费用流,01分数规划)

    题目链接 看到这题我想到了以前做过的一题,名字记不清了,反正里面有"矩阵"二字,然后是道二分图匹配的题. 经典的行列连边网络流. 第\(i\)行和第\(j\)列连边,费用为\(b[ ...

  4. hdu 5328 Problem Killer(杭电多校赛第四场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328 题目大意:找到连续的最长的等差数列or等比数列. 解题思路:1.等差等比的性质有很多.其中比较重 ...

  5. 一. Jmeter--使用代理录制脚本

    Jmeter脚本是以.JMX格式为主 1. Jmeter也是支持录制的,支持第三方录制方式和代理录制方式. (1).第三方录制主要是通过badboy来录制,录制后另存为jmx格式即可. (2).Jme ...

  6. perl6正则 2: 字母,数字,空格,下划线, 字符集

    数字, 字母, 下划线 在perl6中, 如果是 数字, 字母, 下划线, 在正则里可以正接写上. > so / True > so 'perl6_' ~~ /_/ True > 非 ...

  7. Ubuntu 17.10 用 apt 搭建 lamp 环境、安装 phpmyadmin、redis 服务+扩展、mysql 扩展、开启错误提示、配置虚拟主机

    2018-02-24 13:50:30 更新: 个人喜欢相对原生又不太麻烦,所以用 apt 构建环境.不过,最近使用到现在记得出现过了 3 次 apache 或 mysql 服务器无法启动或无法连接的 ...

  8. bash: composer: command not found

    下载composer到本地:curl -sS https://getcomposer.org/installer | php 移动至系统服务:sudo mv composer.phar /usr/bi ...

  9. 深度学习方法(八):自然语言处理中的Encoder-Decoder模型,基本Sequence to Sequence模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. Encoder-Decoder(编码- ...

  10. 使用BEEGO建立一个基本的API框架

    用BEE API命令生成框架. 然后自行更改MODELS,加入MYSQL支持ORM. 然后,自定义了字段的对应,表的名称等. 参考URL: http://www.cnblogs.com/studyzy ...