题解:

二营长!你他娘的意大利炮呢?

dp[i][j][0]: 从i,跋涉到以i为根的子树的每一个节点,在第j个数位上一共产生了多少个0。

dp[i][j][1]: 从i,跋涉到以i为根的子树的每一个节点,在第j个数位上一共产生了多少个1。

转移式:(cur为i的儿子,t = (a[i]>>j)&1)

dp[i][j][0^t] += dp[cur][j][0];

dp[i][j][1^t] += dp[cur][j][1];

初始化:

dp[i][j][0] = (t==0);

dp[i][j][1] = (t==1);

跑一遍dfs,意大利炮充能[MAX]!

我们接下来求以节点x为rank最小点的路径给答案的贡献。

这个地方需要维护,关于x的儿子のdp数组的前缀和。

而预处理时的转移式,恰好做到了这一点。

所以,加上一个式子,在dfs过程,就能计算答案。

code:

  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. using namespace std;
  5. typedef long long LL;
  6. const int NICO = 100000 + 10;
  7. int n, a[NICO];
  8. vector<int> vec[NICO];
  9. int dp[NICO][31][2];LL res;
  10. void dfs(int x, int par)
  11. {
  12. for(int i=0;i<30;i++)
  13. {
  14. if((1<<i)&a[x]) dp[x][i][1] = 1;
  15. else dp[x][i][0] = 1;
  16. }
  17. for(int i=0;i<vec[x].size();i++)
  18. {
  19. int cur = vec[x][i];
  20. if(cur == par) continue;
  21. dfs(cur, x);
  22. for(int j=0;j<30;j++)
  23. {
  24. res += ((LL)dp[cur][j][0]*dp[x][j][1] + (LL)dp[cur][j][1]*dp[x][j][0]) << j;//请机智の读者自行思考该式。
  25. int t = (a[x]>>j)&1;
  26. dp[x][j][0^t] += dp[cur][j][0];
  27. dp[x][j][1^t] += dp[cur][j][1];
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. scanf("%d", &n);
  34. for(int i=1;i<=n;i++)
  35. {
  36. scanf("%d", &a[i]);
  37. res += a[i]; //长度为0的路径还没考虑!
  38. }
  39. for(int i=1;i<n;i++)
  40. {
  41. int u, v;
  42. scanf("%d %d", &u, &v);
  43. vec[u].push_back(v);
  44. vec[v].push_back(u);
  45. }
  46. dfs(1, 0);
  47. cout << res << endl;
  48. }

比赛的时候,意识到了这题得从每一个数位的角度来考虑,但被两点之间的公共祖先怼得想咬人!(◍ ૢ´꒳`◍ ૢ)

2333333。总之,这个题的预处理过程挺值得回味的。看来,举步维艰之时架好意大利炮,的确能扭转战局啊!

CF766 E. Mahmoud and a xor trip [预处理][树形dp]的更多相关文章

  1. Codeforces 766E Mahmoud and a xor trip(树形DP)

    题目链接 Mahmoud and a xor trip 树形DP.先考虑每个点到他本身的距离和,再算所有点两两距离和. 做的时候考虑二进制拆位即可. #include <bits/stdc++. ...

  2. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip dfs 按位考虑

    E. Mahmoud and a xor trip 题目连接: http://codeforces.com/contest/766/problem/E Description Mahmoud and ...

  3. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip

    地址:http://codeforces.com/contest/766/problem/E 题目: E. Mahmoud and a xor trip time limit per test 2 s ...

  4. codeforces766E Mahmoud and a xor trip(按位统计+树形DP)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  5. UVA 1484 - Alice and Bob&#39;s Trip(树形DP)

    题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...

  6. codeforces 766E Mahmoud and a xor trip

    题目链接:http://codeforces.com/problemset/problem/766/E 大意,给出一个$n$个点的树,每个点都有一个权值,令$Disx$为$u$到$v$路径上的异或和求 ...

  7. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip 树形压位DP

      题目链接:http://codeforces.com/contest/766/problem/E Examples input 3 1 2 3 1 2 2 3 out 10 题意: 给你一棵n个点 ...

  8. 【codeforces 766E】Mahmoud and a xor trip

    [题目链接]:http://codeforces.com/contest/766/problem/E [题意] 定义树上任意两点之间的距离为这条简单路径上经过的点; 那些点上的权值的所有异或; 求任意 ...

  9. 牛客练习赛32B Xor Path (树形dp)

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵n个点的树,每个点有权值.定义表示 ...

随机推荐

  1. Java安装

    java特点:跨平台.简单.面向对像编译后解释再运行安装JDK 环境变量的配置:JAVA_HOME:JDK的根目录====C:\Program Files\Java\jdk1.7.0_25Path:J ...

  2. 内网穿透+VS2015自带IIS express实现本地调试(微信等需要将开发环境暴漏到外网的情况使用)

    今天一个兼职结束了,又要开始寻找新的兼职公司了 ,为了贴补家用啊,为了给儿子更好的生活加油! 抒情完毕进入正题,本篇文章要解决的问题是其实在开发微信支付,微信公众号等回调地址必须是外网可访问的80端口 ...

  3. Java Web(三) 会话机制,Cookie和Session详解

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  4. 使用git恢复未提交的误删数据

    不小心将项目中一个文件夹删除还未提交,或者已经提交, 此时想要恢复数据该怎么办? 答案是git reflog,使用git reflog命令可以帮助恢复git误操作,进行数据恢复. 操作过程: 打开终端 ...

  5. react-router 中的history(react中关于后退键的处理用的到)

    react-router 中的history react-router 是建立在history之上的:我们来谈谈这个history吧. github: mjackson/history history ...

  6. p1217晚餐(简单的dijkstra)

    题目: 输入: 1000 5 61 2 3002 4 2003 4 6003 4 8005 3 1002 5 650 输出: 4 这道题呢,其实就是用邻接矩阵将每条边耗费的体力存起来,然后用dijks ...

  7. 把Eclipse项目转换成Maven项目

    把Maven项目转换成Eclipse项目只要使用Maven的Eclipse插件就能做到 mvn eclipse:eclipse 其实Maven的Eclipse插件也有把Eclipse项目转换成Mave ...

  8. 【Unity编程】Unity中的欧拉旋转

    欧拉角的定义 在写这篇博客之前,我搜索了网上很多关于欧拉角的定义,发现大部分引用自维基百科的定义,我这里也引述一下: 维基百科定义 莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向.对于任何参 ...

  9. Selenium 上传文件失败,解决办法一

    昨个改程序遇到一个问题,UI上面有需要上传文件的地方.但是我不知道怎么让Selenium完成 点击上传文件按钮->在弹出的文件选择窗口中选择路径和文件,点确定. 要知道弹出窗口属于window的 ...

  10. css秘密花园

    picture元素 http://www.w3cplus.com/responsive/responsive-images-101-part-6-picture-element.htmlCHAPTER ...