传送门:QAQQAQ

题意:自己看

思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分

(思路来源于https://www.luogu.com.cn/blog/dengyaotriangle/solution-p6623)

首先我们企图树形DP,但是发现每一个元素往上推一格都会+1,所以我们对于二进制每一位考虑贡献。

顶点u对他祖先的二进制第k位贡献,可能是0可能是1,但不断+1时变化是一个混循环,刨掉最开始的,后面都是规则的循环,2^k个0,2^k个1。所以我们可以对有影响的1进行第一次差分

但是因为有多个区间,尤其是$k=0$时复杂度到达O(n2),所以我们再用一次差分:考虑到差分每次赋值的上下两个点分别对于2^k同余,所以我们对于余数再建一个数组,改的区间一定是连续的,就又可以优化成O(1)了

总复杂度$O(nlog(n))$

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=530000;
int a[N],f[N],n,val[N],dp[21][N],dep[N];//(dep+a[])%2^k==i
int base[21];
ll ans=0;
vector<int> v[N]; int dfs(int u)
{
int ret=a[u];
for(int i=0;i<=20;i++) dp[i][(dep[u]+a[u])%base[i]]^=base[i];
for(int i=0;i<=20;i++) ret^=dp[i][dep[u]%base[i]];
for(int i=0;i<v[u].size();i++)
{
int to=v[u][i];
dep[to]=dep[u]+1;
ret^=dfs(to);
}
for(int i=0;i<=20;i++) ret^=dp[i][dep[u]%base[i]];
//上下两个相同的操作是为了异或掉不是u子树的贡献
ans+=1LL*ret;
return ret;
} int main()
{
base[0]=1;
for(int i=1;i<=20;i++) base[i]=base[i-1]*2;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=2;i<=n;i++)
{
scanf("%d",&f[i]);
v[f[i]].push_back(i);
}
dfs(1);
cout<<ans<<endl;
return 0;
}

这份代码让刚才那个思路更好实现:假如u下面的子树已经算好,那么所有元素+1后再去考虑二进制每一位的贡献,当且仅当该位0->1或1->0时才要异或,即在循环节中间或末尾,即$a[v]+dep[v]$与$dep[u]$关于2^k同余(2^(k+1)为循环节)

(留坑更新线段树合并做法)

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

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

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

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

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

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

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

  4. 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)

    洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\)​ 算法通过,因此可以考虑 \(\mathcal O(n^2 ...

  5. 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)

    题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...

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

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

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

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

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

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

  9. 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)

    洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\)​ \(10^9\)​ 的时代了吗?落伍了落伍了/ ...

随机推荐

  1. 【Java】socket编程,输入输出中的问题

    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWri ...

  2. 2020我终于成功搭建了Metasploitable3靶机

    0x00前言 在学习metasploit时我们往往需要一个靶场,下面为大家介绍一下如何在虚拟机中安装metasploitable 3靶场.Metasploitable3是Metasploitable2 ...

  3. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  4. 关于对象的行为、数组、继承和类的高级概念(Java)

    1.对象的行为:                   (1)方法调用栈:所有的方法调用都维护在一个称为调用栈的结构中. 第一个被调用的方法就是main(),该方法是Jvm调用的,因此main()方法总 ...

  5. Cadence OrCAD如何查看整页原理图中的元件的属性

    转载: 1.选中DSN文件右键"Edit Object Properties ".在这里插入图片描述2.单击选择"Pivot"按钮. 3.找到Part refe ...

  6. K-DTree入门

    \(K-D Tree\),一种用来维护\(K\)维数据的数据结构.常用于维护各种高维的数据,或者是邻近搜索等.从另一种意义上说,实际上就是高维的二叉搜索树.对于一些常见的问题,如\(k\)远点对.三位 ...

  7. 设计完美windbg断点

    说到现场调试,断点是最重要的.通常,在生产环境中解决一个非常复杂的问题需要在本地.非生产环境中调试我自己的一台测试机器.我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要 ...

  8. 如何部署MongoDB并开启远程访问Docker版

    Docker安装 安装方法 pull最新版本mongo docker pull mongo 运行 --name设置名称 -v挂载数据 -p端口映射 -d后台运行 mkdir ~/mongo #随便啦自 ...

  9. 题解:POI2012 Salaries

    题解:POI2012 Salaries Description The Byteotian Software Corporation (BSC) has \(n\) employees. In BSC ...

  10. java 画 哆啦A梦

    package Demo;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;impo ...