首页 > 其他分享 >P9745 「KDOI-06-S」树上异或 题解

P9745 「KDOI-06-S」树上异或 题解

时间:2023-10-19 20:47:07浏览次数:34  
标签:P9745 06 leftarrow 二进制 题解 times cases dp

原题

  • 挺好的树形 dp ,正好 dp 不太熟练,练习一下
  • 赛时只想到了暴力和\(X \leq 7\) 的链的部分分,过于 naive 不说了
  • 先考虑链的情况,既然是二进制考虑按位拆分。设 \(g_{i,j,0/1}\) 表示以 \(i\) 为根,从 \(i\) 点连通块的疑惑和第 \(j\) 位为 \(0/1\) ,除去连通块部分的积的和。然后设 \(f_i\) 表示以 \(i\) 为根的答案。
  • 初始状态:若 \(a_u\) 的第 \(i\) 位为 \(1\) ,则 \(g_{u,i,1} = 1\) ,否则为 \(0\)
  • 对于每个儿子,枚举二进制下每位 \(i\) 转移

\[\begin{cases} g_{i,j,0} \leftarrow g_{i,j,0} \times (g_{i-1,j,0} + f_{i-1}) + g_{i,j,1} \times g_{i-1,j,1} \\ g_{i,j,1} \leftarrow g_{i,j,1} \times g_{i-1,j,0} + g_{i,j,1} \times (g_{i-1,j,0} + f_{i-1}) \\ f_{i} = \sum\limits_{j=0}^{63} 2^j \times g_{i,j,1} \end{cases} \]

  • 链是相对比较好理解的,然后考虑树的部分。
  • 同理的, dp 的定义和链相同,初始状态相同。对于每个儿子,枚举二进制下每位 \(i\) 转移

\[\begin{cases} g_{u,i,0} \leftarrow g_{u,i,0} \times (g_{v,i,0} + f_{v}) + g_{v,i,1} \times g_{v,i,1} \\ g_{v,i,1} \leftarrow g_{u,i,0} \times g_{v,i,1} + g_{u,i,1} \times (g_{v,i,0} + f_{v}) \\ f_{u} = \sum\limits_{i=0}^{63} 2^i \times g_{u,i,1} \end{cases} \]

最终复杂度 \(O(n \log X)\)

标签:P9745,06,leftarrow,二进制,题解,times,cases,dp
From: https://www.cnblogs.com/fox-konata/p/17775569.html

相关文章

  • P3119 [USACO15JAN] Grass Cownoisseur G 题解
    分析大概是强连通分量里面最水的一道紫题,不过细节挺多的,做题的时候给蒟蒻震惊到了。题目要求是从\(1\)走到某个点,然后再走回\(1\)号点,中途可逆行一次,问最多能经过几个点。有一个明显的思路是存两个图,一个正图一个反图,正图是为了求\(1\)到各个点的距离,反图是为了求各个点......
  • LuoguCF362B Petya and Staircases 题解
    分析简单排序题。首先Petya可以通过跨过一个台阶和两个台阶保证不经过脏台阶,但是不可以通过跨过三个台阶来保证不经过脏台阶,所以只要看有没有连续的三个脏台阶即可。同时,如果第一个台阶和最后一个台阶至少一个是脏台阶那么就不可以达成。AcceptedCode/*CodeByManipula*/......
  • leetcode 706 设计哈希映射
    leetcode706.设计哈希映射实现一个hashmapReference题目链接......
  • CF424C的题解
    简单题。CF评分才*1600。可以直接先把\(Q\)拆成两部分。\[\begin{aligned}\largea&=\oplus^n_{i=1}p_i\\\largeb&=\oplus^n_{i=1}\oplus^n_{j=1}\\\(i\bmodj)\\\largeQ&=a\oplusb\end{aligned}\]\(a\)很好算,我们看一下\(b\)具体要怎么算。把\(b\)......
  • CF580B的题解
    见到有单调性、有限制的区间问题,很自然地就会想到用尺取去做。先按工资升序排序,然后套上尺取就行了。不会尺取的可以根据这道题去学。时间复杂度\(O(n\logn)\)。#include<cstdio>#include<algorithm>#definelllonglongusingnamespacestd;constintN=1e5+10;intn......
  • ARC166B题解
    发现还没有和我一样的做法。觉得B比A好想的多。令\(A_i\)为\(a_i\)变成\(A\)的倍数最少次数,\(B_i,C_i,AB_i,AC_i,BC_i,ABC_i\)同理。那么我们就有\(A_i=(A-A\bmod{a_i})\bmodA\),其他同理。这一大坨东西显然都能在\(O(n)\)的时间复杂度内算出来。剩下的就很好......
  • [题解]CF1881G Anya and the Mysterious String
    思路发现如果一个字符串中有长度大于等于\(2\)回文子串,必定有长度为\(2\)的回文子串或长度为\(3\)的回文子串,并且形如:aa和aba。所以考虑用线段树这两种情况。维护一段区间的最左、次左、最右、次右的元素,同时用两个标记变量\(f_1,f_2\)分别表示这个区间中是否出现形如......
  • React学习笔记06-函数式组件
    函数式组件即在React中通过函数的方式来声明一个组件importReactfrom"react"functionApp(){return(<div>函数式组件<div>hhh</div></div>)}/*16.8之前//无状态16.8之后reacthooks*/exportdef......
  • [AGC020F] Arcs on a Circle 题解
    ArcsonaCircle首先,一个非常自然的想法是尝试断环成链。怎么断呢?我们发现,选择最长线段的起点处截断是个非常好的选择,因为不可能有一个线段完全覆盖它。这之后,一个紧接着的想法就是DP。假如把描述中的全部“实点”改成“整点”的话,那么这题是比较trivial的,可以通过随便状压......
  • 洛谷 P4749 [CERC2017] Kitchen Knobs 题解
    KitchenKnobs首先,一个trivial的想法是,因为每个旋钮如果上面的数字并非全部相同则其必有唯一最优位置,故直接扔掉那些全部相同的旋钮,对于剩余的求出其最优位置。明显此位置是一\(0\sim6\)的数。因为是区间同时旋转,所以转成数之后就是区间加同一个数。一个经典套路是差分。这......