【题解】异或树

异或树

题目描述

有一棵 \(n\) 个节点的树,它的每一个节点有一个权值特殊值。权值已知,特殊值是从该节点到根的异或和。整棵树的权值则为所有节点特殊值之和。求:找一个节点作为根,使得整棵树的权值最大

思路

先分析任务:找一个节点作为根,使得整棵树的权值最大。因为涉及根,那这显然是一道换根DP

再分析细节:异或和。这是一道与位运算(异或运算 ^ )有关的题

位运算有一个优点:运算结果的每位仅与参与位运算的两个数中对应的那位有关(每一位都是单独运算,不会互相干扰

由于仅与一位有关系,那么简化问题,假设每一位权值只有 \(0\)\(1\) 两种情况:

那么,每一个节点的特殊值与从根到该节点路径上 \(1\) 的数量 \(cnt\) 的奇偶性有关:

  • \(cnt\)时,特殊值为 \(1\)
  • \(cnt\)时,特殊值为 \(0\)

最后的答案是树中特殊值为 \(1\) 的节点的数量。

最后是换根方程

graph TB 1((u)) 2((v)) 3[usons] 4[vsons] 1---2 1---3 2---4

\(size_u\)\(num_u\) 为以 \(u\) 为根的子树中节点的数量和特殊值为 \(1\) 的节点数量,\(dp_u\) 为答案(已知 \(dp_1\)),现在考虑转移:

  • \(a_v=1\) 时:

\[dp_v=dp_u-(num_u-num_v)+(size_u-size_v-(num_u-num_v))-num_v+(size_v-num_v); \]

  • \(a_v\ne 1\) 时:没有变化

对每一个数位跑一遍,答案汇总就能得到最终答案

posted @ 2026-08-26 01:06  Denia-kawaii  阅读(7)  评论(0)    收藏  举报