题目大意:

https://ac.nowcoder.com/acm/contest/272/B?&headNav=acm

给定一棵n个点的树,每个点有权值。定义表示  到  的最短路径上,所有点的点权异或和。

对于,求所有的异或和。
 
 
一棵树上经过某个节点u的路径数 = 路径总数 - 子节点往下的路径数 - 父节点往上的路径数 (无向)
路径总数 = n*(n-1),子节点往下的路径数 = sizeSon*(sizeSon-1)
则 父节点个数 = n-sizeU,父节点往上的路径树数 = (n-sizeU)*(n-sizeU-1)
即 res = n*(n-1) - sum( sizeSon*(sizeSon-1) ) - (n-sizeU)*(n-sizeU-1)
要求 ,即要求有向,有向路径 = 无向路径 / 2 = res / 2
 
#include <bits/stdc++.h>
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
using namespace std;
const int N=5e5+;
LL n, w[N], ans;
struct EDGE { int to,nt; }e[N<<];
int head[N], tot;
void addE(int u,int v) {
e[tot].to=v;
e[tot].nt=head[u];
head[u]=tot++;
}
void init() {
ans=0LL; tot=; mem(head,);
} LL dfs(int u,int fa) {
LL siz=1LL, cnt=0LL;
for(int i=head[u];i;i=e[i].nt) {
int v=e[i].to;
if(v==fa) continue;
LL t=dfs(v,u);
siz+=t;
cnt+=t*(t-1LL)/;
// 子节点往下的路径
}
cnt+=(n-siz)*(n-siz-1LL)/;
// 父节点往上的路径
cnt=n*(n-1LL)/-cnt;
// 路径总数-以上路径=需要经过u节点的路径
ans^=(cnt&)*w[u];
// 偶数条路径即偶数次^w[u]=0 奇数条则计算1次^w[i]即可
return siz;
} int main()
{
while(~scanf("%d",&n)) {
init();
for(int i=;i<n;i++) {
int u,v; scanf("%d%d",&u,&v);
addE(u,v); addE(v,u);
}
for(int i=;i<=n;i++) scanf("%d",&w[i]);
dfs(,);
printf("%d\n",ans);
} return ;
}

牛客B-Xor Path /// 求所有Path( i->j )( j >= i )路径的异或和的更多相关文章

  1. 牛客网 牛客练习赛11 D.求距离

    D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...

  2. 牛客网机试题-求root(N,k)

    题目描述     N<k时,root(N,k) = N,否则,root(N,k) = root(N',k).N'为N的k进制表示的各位数字之和.输入x,y,k,输出root(x^y,k)的值 ( ...

  3. 牛客练习赛16 E - 求值

    题目大意: 链接:https://www.nowcoder.com/acm/contest/84/E 给定n个数字a1, a2, ..., an. 定义f(l, r) = al | al+1| ... ...

  4. 牛客 - 17968 - xor序列 - 线性基

    https://ac.nowcoder.com/acm/problem/17968 下面是错误的做法,因为题目要求必须使用x,而y在check的时候不一定用到等价于x的线性基来构成. 正确的做法是直接 ...

  5. 2020牛客暑期多校训练营(第五场)B - Graph (异或 最小生成树 分治 Trie)

    B - Graph 题目链接 每次操作不会改变两点之间的路径异或和 以 1 号点为起点,算出任意一点到 1 号点的异或值 dis[i](把该值当做 i 号点权值), 那么任意两点的异或值为 \(dis ...

  6. 2019牛客暑期多校训练营(第二场) - J - Go on Strike! - 前缀和预处理

    题目链接:https://ac.nowcoder.com/acm/contest/882/C 来自:山东大学FST_stay_night的的题解,加入一些注释帮助理解神仙代码. 好像题解被套了一次又一 ...

  7. 2019牛客暑期多校训练营(第二场)J.Subarray

    题意:给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段 思路:假设我们统计了当前的前缀和 我们显然可以用树状数组维护一下前缀和 这样我们可以nlogn ...

  8. 2019牛客暑期多校训练营(第二场)J

    题意 给一个长度为1e9的只包含1和-1的数列,1的个数不超过1e7,计算有多少对\((l,r)\)满足\(\sum_{i=l}^r a[i]>0\) 分析 dp求出每段连续的1最右端为右端点的 ...

  9. PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)

    题目链接(貌似未报名的不能进去):https://www.nowcoder.com/acm/contest/141/A 题目: 题意:背包题意,并打印路径. 思路:正常背包思路,不过五维的dp很容易爆 ...

随机推荐

  1. ElasticSearch Roaring bitmap 和跳表联合查询

    ElasticSearch Roaring map 先把所有数按65535划分, 划分方法就是求商和余数,商代表数字最终在哪一块,余数代表最终在块内的数字 比如 1, 65536, 65537, 13 ...

  2. 文件下载java代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  3. 常用的HTTP请求头与响应头

    HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件.HTTP消息头用来准确描述正在获取的资源.服务器或 ...

  4. C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表

    一般的单据都是由主从关系的,比如部门与人员.单据表头与表身.仓库与存货.分类与档案等等 所以主从关系是报表用的最多的 1.准备数据库 简单方便 --主表 create table RdRecord ( ...

  5. C-Ubuntu中MySQL出现ERROR1698(28000):Access denied for user root@localhost错误解决方法

    卸载原先的MySQL,重新安装过程中没有提示设置密码, 当键入命令:mysql -uroot -p; 不知密码是什么,输入主机的密码以及不输入密码,回车后都出现标题错误. 寻找多篇相关博文,验证如下博 ...

  6. SingalR 构建 推送服务器初探

    项目需要用到推送,于是重新研究了下推送框架,最好能够独立成一个服务,与业务无关的服务,可以给所有的项目通用.找了好久最终决定用SinglR 框架. Signal 是微软支持的一个运行在 Dot NET ...

  7. Java-向上转型后调用方法和属性的注意事项

    /*多态的注意事项 (1)如果子类重写了父类方法, 意味着子类里定义的方法彻底覆盖了父类里同名的方法, 系统将不可能把父类里的方法转移到子类中 补充对(1)的个人理解: 当s向上转型传给了b, b即使 ...

  8. 使用tensorboard报错 ImportError: No module named past.builtins

    安装 future pip install future conda install future

  9. Jenkins添加Windows自动化构建方案

    一.为Jenkins添加Windows节点 这里需要填写远程工作目录,启动方法一项一定要选择"Launch agent via Java Web Start"一项,其它的保持默认. ...

  10. jq-demo-2种吸顶效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...