Codechef WEASELTX
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的更多相关文章
- Codechef SEPT17
Codechef SEPT17 比赛链接:https://www.codechef.com/SEPT17 CHEFSUM code给定数组 a[1..n] ,求最小的下标 i ,使得 prefixsu ...
- 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1288 Solved: 490 ...
- 【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...
- codechef 两题
前面做了这场比赛,感觉题目不错,放上来. A题目:对于数组A[],求A[U]&A[V]的最大值,因为数据弱,很多人直接排序再俩俩比较就过了. 其实这道题类似百度之星资格赛第三题XOR SUM, ...
- codechef January Challenge 2014 Sereja and Graph
题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...
- BZOJ3509: [CodeChef] COUNTARI
3509: [CodeChef] COUNTARI Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 339 Solved: 85[Submit][St ...
- CodeChef CBAL
题面: https://www.codechef.com/problems/CBAL 题解: 可以发现,我们关心的仅仅是每个字符出现次数的奇偶性,而且字符集大小仅有 26, 所以我们状态压缩,记 a[ ...
- CodeChef FNCS
题面:https://www.codechef.com/problems/FNCS 题解: 我们考虑对 n 个函数进行分块,设块的大小为S. 每个块内我们维护当前其所有函数值的和,以及数组中每个元素对 ...
- codechef Prime Distance On Tree(树分治+FFT)
题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...
随机推荐
- go test test & benchmark
开发程序其中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,又如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早 ...
- HDU2084_数塔【简单题】【数塔】
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- long long , __int64 范围
VC的64位整数 分别叫做__int64与unsigned __int64,其范 围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036 ...
- Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面
之前博客中,介绍过使用谷歌提供的键盘的一些api,能够非常好地自己定义键盘,參考我之前的博客链接:android 自己定义键盘 ,这个有一个局限性,仅仅能占满屏幕,无法做到仅仅能占一部分的 ...
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part I
A Tutorial on the Device Tree (Zynq) -- Part I 此教程的目的 本教程是针对Xilinx' Zynq-7000 EPP设备(一个集成了FPGA的ARM Co ...
- Service-level agreement
Service-level agreement - Wikipedia https://en.wikipedia.org/wiki/Service-level_agreement
- 用Qt编写的计算文件MD5值的Demo
Dialog.ui <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0& ...
- 将异常(getStackTrace)转化成String
方法一: private static String getStackMsg(Exception e) { StringBuffer sb = new StringBuffer(); StackTra ...
- 主线程 view
参考https://blog.csdn.net/u011001142/article/details/50912358
- xalion三层与Web开发帖子一览表 good
使用http.sys,让delphi 的多层服务飞起来(Delphi借用http.sys充当http服务器,也就可以发送返回JSON等信息,当然浏览器也可以使用)http://www.cnblogs. ...