WEASELTX code
给你一棵 n 个节点的有根树(节点),以及每个节点 i 的初始权值 a[i] 。
一次操作则是指将每个节点的权值变为以其为根的子树中所有节点的权值之异或和。
维护 q 个询问,每个询问则是问 T 次操作之后,根节点的权值。
解:
相关题目:HDU 6129 http://acm.hdu.edu.cn/showproblem.php?pid=6129
HDU 6129 是树退化成一条链的情形。

我们的做法依然是考虑每个节点对答案的贡献。
如果是求和,则 T 次操作之后,考虑每个节点 i 对答案的贡献,结果为
$$\sum_{i} \binom{T+d[i]-1}{d[i]} a[i],$$
其中 d[i] 是节点 i 的深度(根节点深度为 0 ),额外定义$\binom{-1}{0} = 1$。

而对于异或和,我们只需要考虑系数模 2 的余数即可,上式可变为
$$\bigoplus_{i} \left( \binom{T+d[i]-1}{d[i]} \bmod 2 \right) a[i].$$

剩下我们要考虑 $\binom{a+b}{b} \bmod 2 = 1$ 的充要条件。
由 Lucas 定理,可得 $\binom{a}{b} \bmod 2 = 1$ 当且仅当 $a \operatorname{and} b = b$ 。
从而,$\binom{a+b}{b} \bmod 2 = 1$ 当且仅当 $(a+b) \operatorname{and} b = b$ ,即$a \operatorname{and} b = 0$(不是那么显然,需要读者自行证一下)。

观察式子可以发现,设$2^k > \max_i \{d[i]\}$,则 $T$ 次操作后的结果与 $T \bmod 2^k$ 次操作后的结果相同。
因此我们可以只考虑 $0 \le T < 2^k$ 的情况。

注意到 $\binom{T+d[i]-1}{d[i]} \bmod 2 = 1$ 当且仅当 $(T-1) \operatorname{and} d[i] = 0$。
于是我们先把所有节点按照其深度分组,同一个深度的节点先合并在一块,因为他们在参与运算时一定是捆绑在一起的。
接着根据 $(T-1)$,我们依次枚举满足条件的 $d[i]$ ,这是一个经典的子集枚举,即枚举 ~(T-1) 的子集。
枚举 s 的子集的方式为

for (int x = s; x; x = (x-)&s)
{
// we have enumerated every x satisfying x&s = x.
}

由于 T 会取遍 $[0, 2^k)$ 之间的值,这样对每个 T 都枚举一遍子集的时间复杂度为 $O(3^k)$ (不是那么显然,需要读者自行证明)。
而 $k = O(\log n)$,于是,总的时间复杂度为 $ O(3^{\log n}) $。

Codechef WEASELTX的更多相关文章

  1. Codechef SEPT17

    Codechef SEPT17 比赛链接:https://www.codechef.com/SEPT17 CHEFSUM code给定数组 a[1..n] ,求最小的下标 i ,使得 prefixsu ...

  2. 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树

    3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1288  Solved: 490 ...

  3. 【BZOJ4260】 Codechef REBXOR 可持久化Trie

    看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...

  4. codechef 两题

    前面做了这场比赛,感觉题目不错,放上来. A题目:对于数组A[],求A[U]&A[V]的最大值,因为数据弱,很多人直接排序再俩俩比较就过了. 其实这道题类似百度之星资格赛第三题XOR SUM, ...

  5. codechef January Challenge 2014 Sereja and Graph

    题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...

  6. BZOJ3509: [CodeChef] COUNTARI

    3509: [CodeChef] COUNTARI Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 85[Submit][St ...

  7. CodeChef CBAL

    题面: https://www.codechef.com/problems/CBAL 题解: 可以发现,我们关心的仅仅是每个字符出现次数的奇偶性,而且字符集大小仅有 26, 所以我们状态压缩,记 a[ ...

  8. CodeChef FNCS

    题面:https://www.codechef.com/problems/FNCS 题解: 我们考虑对 n 个函数进行分块,设块的大小为S. 每个块内我们维护当前其所有函数值的和,以及数组中每个元素对 ...

  9. codechef Prime Distance On Tree(树分治+FFT)

    题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...

随机推荐

  1. Linux下使用curl进行http请求(转)

    curl在Linux下默认已经安装,Windows需要自行安装. 下载地址:https://curl.haxx.se/download.html Windows离线版本:链接:http://pan.b ...

  2. android 加一个按钮,退出程序

    package com.example.yanlei.yl; import android.graphics.Color; import android.support.v7.app.AppCompa ...

  3. HTML小知识点积累

    1.怎样让heigth:100%起效?   有时候我们设置heigth:100%,想让当前控件铺满整个屏幕,可是非常少情况下这个属性能达到我们想要的效果,这是为什么呢?   而依据W3C的规范.百分比 ...

  4. weex 项目 创建 远程 icon

    一.创建 远程 icon 步骤一:打开  阿里巴巴矢量图标库 官网:http://www.iconfont.cn/ 步骤二:选择项目需要的 icon 步骤三:添加到项目(没有项目会自动创建) 步骤四: ...

  5. Android studio 升级,不用下载完整版,完美更新到2.0

    Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ...

  6. java cup占用高分析脚本

    [was@dmgr ita-scripts]$ vi java_analys.sh   PID=$1 ; ps -mp $PID -o THREAD,tid,time | awk -F " ...

  7. 【转载】lvs为何不能完全替代DNS轮询

    上一篇文章"一分钟了解负载均衡的一切"引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepa ...

  8. HDU 5289 Assignment(多校联合第一场1002)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  9. HDU 1060 Leftmost Digit (数学/大数)

    Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  10. iOS提交应用至App Store流程及真机调试 一,证书、配置文件

    前言:你要有苹果开发人员账号,我用的是个人账号.其次xcode为xcode 7,因为xcode 7须要 os x 系统 10.11 或更高的版本号, 所以os x 系统也须要 10.11 或更高的版本 ...