来源:牛客网:

Xor Path

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
给定一棵n个点的树,每个点有权值A i。定义path(i,j)表示i 到j 的最短路径上,所有点的点权异或和。
对于i=1∼n−1, j=i+1∼n,求所有path(i,j)的异或和。

输入描述:

第一行一个整数n。 接下来n-1行,每行2个整数u,v,表示u,v之间有一条边。 第n+1行有n个整数,表示每个点的权值A i。

输出描述:

输出一个整数,表示所有{\mathbb{path}(i,j)}path(i,j)的异或和,其中 i=1∼n−1, j=i+1∼n。

示例1
输入
复制

4
1 2
1 3
1 4
1 2 3 4

输出
复制

5

题解:

根据异或的性质,一个数异或两次就没了,所以一个点异或两次(偶数次)就相当于没有。所以我们只需要统计每个点被异或了多少次
我们考虑一下一个点x会有多少种情况:
size[x]表示以x为根的子树内有多少点

  1. x作为一个路径的顶点 ,那么就要与剩下的点直接连接,所以就是n-1
  2. 当x为根时,x的两个子树(其中一个子树名为y)中任意点进行连接。那么就是他子树的节点个数两两相乘。子树所有点为size[x]-1,子树y:size[y],剩余点为size[x]-1-size[y],最后两个相乘size[y]×(n−1−size[y]) y是动态取值,
  3. 当x不为根时, x的子树与x的父亲节点的子树(除了x之外的)之间的路径经过该点的次数。子树点个数为size[x]-1,非子树个数为n-size[x],总数就是(size[x]−1)×(n−size[x])

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int size[maxn];
int a[maxn],sum;
vector<int>g[maxn];
typedef long long ll;
int n;
void dfs(int u,int fa)
{size[u]=1;ll res=0;//记录奇偶次数 for(auto x:g[u]){if(x==fa)continue;dfs(x,u);size[u]+=size[x];//更新以u为根的树的大小 res+=1ll*(size[u]-size[x]-1)*size[x];//我们只需要知道奇偶性即可 }res+=1ll*(size[u]-1)*(n-size[u]);//第三种情况
//  res>>=1;//多计算了一遍 res+=n-1; //第一种情况 if(res&1)//如果为奇数记入结果 sum^=a[u];
}
int main()
{cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}for(int i=1;i<=n;i++){cin>>a[i];//点值 }dfs(1,0);//从第一个点开始cout<<sum<<endl;return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int size[maxn];
int a[maxn],sum;
vector<int>g[maxn];
typedef long long ll;
int n;
void dfs(int u,int fa)
{size[u]=1;ll res=0;//记录奇偶次数 for(auto x:g[u]){if(x==fa)continue;dfs(x,u);res+=1ll*(n-size[x]-1)*size[x];//我们只需要知道奇偶性即可 size[u]+=size[x];//更新以u为根的树的大小 }res+=1ll*(size[u]-1)*(n-size[u]);//第一和第三种情况 res>>=1;//多计算了一遍 res+=n-1; if(res&1)//如果为奇数记入结果 sum^=a[u];
}
int main()
{cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}for(int i=1;i<=n;i++){cin>>a[i];//点值 }dfs(1,0);//从第一个点开始cout<<sum<<endl;return 0;
}

牛客网【每日一题】7月30日题目精讲—Xor Path相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 牛客网【每日一题】4月30日题目精讲 换个角度思考

    链接: 文章目录 题目描述 题解: 主席树做法: 代码: 树状数组: 更扯淡的方法!!! 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...

  3. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  4. 【每日一题】8月28日题目精讲 编号

    [每日一题]8月28日题目精讲 编号 链接:https://ac.nowcoder.com/acm/problem/19925 来源:牛客网 题目描述 你需要给一批商品编号,其中每个编号都是一个7位1 ...

  5. 【每日一题】7月17日题目精讲—BOWL 碗的叠放

    [每日一题]7月17日题目精讲-BOWL 碗的叠放 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  6. 【每日一题】7月15日题目精讲—生日快乐

    [每日一题]7月15日题目精讲-生日快乐 [SCOI2009]生日快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO For ...

  7. 【每日一题】7月13日题目精讲—Kingdom

    [每日一题]7月13日题目精讲-Kingdom 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bi ...

  8. 牛客网【每日一题】4月14日题目精讲 Xorto

    文章目录 题目描述 题解: 代码: 扩展 传送 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format:%lld 题目描述 ...

  9. 牛客网 【每日一题】8月5日题目精讲—蓝魔法师

    来源:牛客网: 文章目录 题目描述 题解: 代码: 题目描述 "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于 ...

最新文章

  1. 推荐一款 Nginx 可视化配置神器
  2. 用程序消除一道概率题的二义性
  3. CuteEditor 4.0.7研究
  4. vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)
  5. 日报 18/07/22 您的设计模式!终于有时间开写~ ~
  6. cocos2d-x游戏实例(15)-纵版射击游戏(2)
  7. 笔记本中美化代码的方法
  8. 神经网络 误差下降 准确率不上升_Go进程的HeapReleased上升,但是RSS不下降造成内存泄漏?...
  9. Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not found
  10. 从一开始,说出事java匿名内部类
  11. Linux命令大全(超详细版)
  12. StrngBuffer可变字符串
  13. 解读提升百度权重-刷百度指数的方法
  14. MySQL Java的JDBC编程
  15. 【STM32H750】玩转ART-Pi(二)——制作MDK的外部QSPI-FLASH烧录算法
  16. 跟键盘在一起时间比女朋友还长? 程序员如何选好一块专属键盘?
  17. 三级分销如何做分销推广 如何设置分销比例
  18. java8-stream新特性详解及实战
  19. 2004年9月30日星期三
  20. 汤姆斯的天堂梦_NOI导刊2010提高(05)【洛谷P1796】

热门文章

  1. 跟你们讲一个鬼故事,TA回来了!
  2. 德国布线牛到不行?今天带你看看咱们中国的!
  3. 数理思维这样培养才有效,从小就赢在方法上,每本不足3元!!
  4. C语言计算一个数的平方根立方根,怎样快速计算出一个数的平方根立方根?
  5. python中with as用法_python 中关于with...as的用法
  6. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  7. dialog element 删掉标题_ElementUI 销毁Dialog数据(简单粗暴)
  8. eladmin代码自动生成_如何让Mybatis自动生成代码
  9. 计算机网络互联网技术实验报告,2013计算机网络技术与应用.实验报告01
  10. python frame用法_python—dataframe用法