牛客B-Xor Path /// 求所有Path( i->j )( j >= i )路径的异或和
题目大意:
https://ac.nowcoder.com/acm/contest/272/B?&headNav=acm
给定一棵n个点的树,每个点有权值。定义
表示
到
的最短路径上,所有点的点权异或和。
- #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 )路径的异或和的更多相关文章
- 牛客网 牛客练习赛11 D.求距离
D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...
- 牛客网机试题-求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)的值 ( ...
- 牛客练习赛16 E - 求值
题目大意: 链接:https://www.nowcoder.com/acm/contest/84/E 给定n个数字a1, a2, ..., an. 定义f(l, r) = al | al+1| ... ...
- 牛客 - 17968 - xor序列 - 线性基
https://ac.nowcoder.com/acm/problem/17968 下面是错误的做法,因为题目要求必须使用x,而y在check的时候不一定用到等价于x的线性基来构成. 正确的做法是直接 ...
- 2020牛客暑期多校训练营(第五场)B - Graph (异或 最小生成树 分治 Trie)
B - Graph 题目链接 每次操作不会改变两点之间的路径异或和 以 1 号点为起点,算出任意一点到 1 号点的异或值 dis[i](把该值当做 i 号点权值), 那么任意两点的异或值为 \(dis ...
- 2019牛客暑期多校训练营(第二场) - J - Go on Strike! - 前缀和预处理
题目链接:https://ac.nowcoder.com/acm/contest/882/C 来自:山东大学FST_stay_night的的题解,加入一些注释帮助理解神仙代码. 好像题解被套了一次又一 ...
- 2019牛客暑期多校训练营(第二场)J.Subarray
题意:给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段 思路:假设我们统计了当前的前缀和 我们显然可以用树状数组维护一下前缀和 这样我们可以nlogn ...
- 2019牛客暑期多校训练营(第二场)J
题意 给一个长度为1e9的只包含1和-1的数列,1的个数不超过1e7,计算有多少对\((l,r)\)满足\(\sum_{i=l}^r a[i]>0\) 分析 dp求出每段连续的1最右端为右端点的 ...
- PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)
题目链接(貌似未报名的不能进去):https://www.nowcoder.com/acm/contest/141/A 题目: 题意:背包题意,并打印路径. 思路:正常背包思路,不过五维的dp很容易爆 ...
随机推荐
- linux基础知识汇总(四)--ps grep命令
转:http://www.cnblogs.com/allen8807/archive/2010/11/10/1873843.html http://www.cnblogs.com/end/archiv ...
- java 简单 SocketPool
package org.rx.socks; import lombok.extern.slf4j.Slf4j; import org.rx.common.LogWriter; import org.r ...
- 0620 ALT选择竖排 虚函数的优缺点 浅拷贝深拷贝 操作系统
1.word按住ALT可以选择整列文字 2.虚函数优点:http://blog.163.com/jianhuali0118@126/blog/static/3774997020083610434091 ...
- leetcode.字符串.205同构字符串-Java
1. 具体题目 给定两个字符串 s 和 t,判断它们是否是同构的.如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的.所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不 ...
- poj 1905 图形推算+二分
参考博客: 题意: 一根两端固定在两面墙上的杆 受热弯曲后变弯曲 求前后两个状态的杆的中点位置的距离 分析:见博客 代码: #include<stdio.h> #include<io ...
- LCA的 Trajan 算法
参考博客 参考博客 根据博客的模拟,就可以知道做法和思想. 现在就是实现他. 例题 :hdu 2586 题意:m 个询问,x 到 y 的距离,我们的思想就是求出:x到根的距离+y到根的距离- ...
- 使用Docker快速部署ELK分析Nginx日志实践
原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...
- 从零开始学Jqueue
http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jQuery-Learn-1.html
- docker Dcokerfile学习---构建nginx环境
1.创建项目目录并上传包 $ mkdir docker_nginx $ cd docker_nginx 下载nginx包 $ wget http://nginx.org/download/nginx- ...
- java访问https绕过证书信任
package com.xing.test; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...