day2t2但难度不大,和AGC044C解法类似

题目大意:

给定一棵 \(n\) 个结点的有根树 \(T\),结点从 \(1\) 开始编号,根结点为 \(1\) 号结点,每个结点有一个正整数权值 \(v_i\)

设 \(x\) 号结点的子树内(包含 \(x\) 自身)的所有结点编号为 \(c_1,c_2,\dots,c_k\),定义 \(x\) 的价值为:

\(val(x)=(v_{c_1}+d(c_1,x)) \oplus (v_{c_2}+d(c_2,x)) \oplus \cdots \oplus (v_{c_k}+d(c_k, x))\)

其中 \(d(x,y)\) 表示树上 \(x\) 号结点与 \(y\) 号结点间路径的边数,\(d(x, x) = 0\)

求 \(\sum\limits_{i=1}^n val(i)\)

小小转化一下,发现能直接先把每个点都赋成输入的点权,然后变成从叶子节点开始自下而上子树内(除了自己)都加1,相当于就是距离了,就很好做了

发现还要求子树异或和合并两个子树信息,直接上01trie,那么这棵trie只需要维护insert,merge,全局+1,查询异或就行了。

merge就是线段树合并类似

全局+1就是交换两棵子树,然后再对新的0儿子子树递归

具体实现,查询可以直接开个数组调用就行,至于怎么计算异或,可以记录下经过0/1的位置,对于第 \(k\) 层的1来说经过奇数次贡献就是 \(2^k\)

代码十分好写

#include<bits/stdc++.h>

#define maxn 525015

#define int long long 

using namespace std;

template<class T>

inline T read(){
T r=0,f=0;
char c;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))r=(r*10)+(c^48),c=getchar();
return f?-r:r;
} int n,val[maxn]; vector<int>nbr[maxn]; /*
1. insert
2. merge
3. ask subtree's XOR
4. all_add_1
*/ int trie[maxn*27][2],root[maxn*27]; int tot=0,num[maxn*27],sum[maxn*27]; inline void pushup(int u,int dep){
sum[u]=sum[trie[u][0]]^sum[trie[u][1]]^((num[trie[u][1]]&1)<<dep);
} void insert(int &u,int x,int dep){
if(!u)u=++tot;
++num[u];
if(dep>20)return;
int idx=(x>>dep)&1;
insert(trie[u][idx],x,dep+1);
pushup(u,dep);
} void alladd1(int x,int dep){
if(!x)return;
swap(trie[x][0],trie[x][1]);
alladd1(trie[x][0],dep+1);
pushup(x,dep);
} int merge(int p,int q,int dep){
if(!p||!q)return p|q;
num[p]+=num[q];
trie[p][0]=merge(trie[p][0],trie[q][0],dep+1);
trie[p][1]=merge(trie[p][1],trie[q][1],dep+1);
pushup(p,dep);
return p;
} inline int askxor(int x){
return sum[x];
} int ans=0; void solve(int x,int lst){
for(int i=0;i<nbr[x].size();i++){
int to=nbr[x][i];
if(to==lst)continue;
solve(to,x);
root[x]=merge(root[x],root[to],0);
}
alladd1(root[x],0);
insert(root[x],val[x],0);
ans+=askxor(root[x]);
} signed main(){
n=read<int>();
for(int i=1;i<=n;i++){
val[i]=read<int>();
}
for(int i=2;i<=n;i++){
int fa=read<int>();
nbr[i].emplace_back(fa);
nbr[fa].emplace_back(i);
}
solve(1,0);
printf("%lld\n",ans);
return 0;
}

P6623 [省选联考 2020 A 卷] 树的更多相关文章

  1. 洛谷P6623——[省选联考 2020 A 卷] 树

    传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...

  2. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  3. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  4. luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)

    luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...

  5. luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)

    luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...

  6. P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】

    正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出\(n\)个点的一张完全无向图,\(i\sim j\)的边权是\(|i-j|\). 然后给出 ...

  7. 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)

    题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...

  8. [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂

    题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...

  9. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  10. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

随机推荐

  1. WPF 简单实现一个支持删除自身的应用

    我准备写一个逗比的应用,然而我担心被小伙伴看到这个应用的文件从而知道是我写的,于是我就需要实现让应用能自删除的功能.核心实现方法就是调用 cmd 传入命令行,等待几秒之后删除文件 应用程序在运行时,是 ...

  2. 超好用的 Redis GUI 工具,你值得拥有

    超好用的 Redis GUI 工具,你值得拥有 提供原生的性能,并且比使用 Electron 等 Web 技术开发的同等应用程序消耗的资源少得多. 下载地址:http://www.redisant.c ...

  3. 一个完整的可以输出移动端当前省市(地理坐标)的html页面

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. LLM优化:开源星火13B显卡及内存占用优化

    1. 背景 本qiang~这两天接了一个任务,部署几个开源的模型,并且将本地经过全量微调的模型与开源模型做一个效果对比. 部署的开源模型包括:星火13B,Baichuan2-13B, ChatGLM6 ...

  5. python 简明笔记

    python 简明笔记 基础内置类型 数值类型 字面量 3.14e-10 3.14E-10 3.14e+10 #八进制 0o123 #十六进制 0xabf #二进制 0b10101 #进制转换函数 # ...

  6. Cesium的HeadingPitchRange 用法

    这个有别于headingpitchroll, headingpitchroll是用在orientation属性上的(比如相机的setView,flyTo,以及entities.add中) Headin ...

  7. postgresql 开启审计日志

    1.审计清单说明 logging_collector     --是否开启日志收集开关,默认off,推荐on log_destination       --日志记录类型,默认是stderr,只记录错 ...

  8. 防患未然 | AIRIOT城市管廊智能运维解决方案

      城市管廊构建复杂,管道内部传感器和附属设备居多,且近年来事故频发,地下空间属性人员进出管理不便,紧急情况应急调度措施有限.传统人工管理模式,运营成本高,且管理水平和质量也无法得到有利保障.因此在管 ...

  9. MegaCli64查看磁盘损坏,错误个数统计情况

    如下,两个命令,是磁盘濒临崩坏,比如存在扇区损坏之类的事情发生.咨询的浪潮热线,报sn.他们的临界值是500,我们监控脚本是200告警.Predictive Failure Count 这个的数字比M ...

  10. turltle模块详解

    引言:turtle(海龟)模块,我们是用它来进行画图的,基本上就是画简单的直线,点,和曲线. 你可以把它想成一个小海龟,在沙滩上行走,然后留下的各种痕迹,使用Turtle模块可以绘制很多精美的图形. ...