「刷题」xor
说实话这道题没有A掉,不过所有的思路都是我自己想的,我觉得这个思路真的很棒很棒很棒的。
首先这个题的题面描述告诉我这种运算有封闭性,满足结合律和交换率,那么其实这个东西是个群运算了,而且这个群有单位元和逆元,那我们就可以针对题中的运算制造逆运算。
然后考虑树桶dp。
我们发现当所有的x都是0的时候,可以直接简单的换根dp。
然而x不为0的时候我们就必须对路径上的每个点做一个反处理,让相应的点不能被同时加入路径。
首先考虑用线段树维护每个点的树桶。那么复杂度是$O(klogn)$的。
我们每次归并一个儿子就在线段树上打上相应的贡献。
然后发现因为对于每个点来说,他的父链必然不是敌人,那么我们考虑对于以每一个点为$lca$的路径的贡献。
那么其实我们固定了一条以当前这个lca为顶的链之后,所有的敌人的子树是确定的了,那么我们在线段树上ban掉这个子树(dfs序连续一段),然后在lca的子树区间中查询线段树,没有归并进来的儿子不被计算,计算的是当前这个还没有归并进来的儿子所形成的链和其他已经归并了的儿子的链组成的路径的贡献,把这个贡献*2就是这条路经正反向的贡献。
这样复杂度是$O(n^2klogn)$的。
考虑重链划分来优化。
用两种dfs,大的和小的,大的套小的。
我们先在大dfs中,大dfs他的重儿子然后不进行小dfs,在线段树上加入重儿子的贡献,之后遍历当前点的每一个轻儿子,先进行小dfs,按照上面那种套路来形成链,同时在线段树上查询。
我们发现漏了一部分的贡献,就是重儿子到他所在和重链的所有父辈节点的路径贡献没有计算,树剖复杂度是$O(log^2)$的,但是注意到重链只有一条,可以直接在线段树上查询这条重链从这个重儿子到链顶的贡献,*2即可。
注意到重儿子没有进行小dfs,也就是说他只进行了一次大dfs,是启发式合并的复杂度。
那么总复杂度是$O(nklog^2n)$
不能通过本题,不过我喜欢这个算法。
「刷题」xor的更多相关文章
- 「刷题」THUPC泛做
刷了一下,写一下. T1. 天天爱射击 可以这样想. 我们二分一下每一块木板在什么时刻被击碎. 然后直接用主席树维护的话是\(O(nlog^2n)\)的. 会\(T\),而且是一分不给那种... 那么 ...
- 「刷题」JZPKIL
这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & ...
- 「刷题」Triple
正解是普通型母函数+FFT. 才学了多项式,做了一道比较好的题了. 首先有三个斧子被偷了. 我们考虑构造一种普通型母函数. 就是说一种多项式吧,我的理解. 系数是方案,下标,也就是所谓的元指数代表的是 ...
- 「刷题」GERALD07加强版
是LCT了. 首先我们不知道联通块怎么数. 然后颓标签知道了是LCT. 那么考虑一下怎么LCT搞. 有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数. 这个可以很简单的用主席树来 ...
- 「刷题」可怜与STS
又是一道假期望,我们发现一共有$ C_{2n}^m $种情况. 而$ \frac{(2n)!}{m!(2n-m)!}=C_{2n}^m $ 其实结果就是各个情况总伤害. 1.10分算法,爆搜10分. ...
- 「刷题」Color 群论
这道题乍一看挺水的,直接$ Ploya $就可以了,可是再看看数据范围:n<=1e9 那就是有1e9种置换,这不歇比了. 于是考虑式子的优化. 首先证明,转i次的置换的每个循环结大小是 $ gc ...
- 「刷题」卡特兰数&prufer序列
1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...
- 「刷题笔记」DP优化-状压-EX
棋盘 需要注意的几点: 题面编号都是从0开始的,所以第1行实际指的是中间那行 对\(2^{32}\)取模,其实就是\(unsigned\ int\),直接自然溢出啥事没有 棋子攻击范围不会旋转 首先, ...
- 「刷题笔记」AC自动机
自动AC机 Keywords Research 板子题,同luoguP3808,不过是多测. 然后多测不清空,\(MLE\)两行泪. 板子放一下 #include<bits/stdc++.h&g ...
随机推荐
- 快学Scala 第十七课 (trait 入门)
trait 入门: trait类似于java的接口,不过比java接口功能更强大,可以有实体成员,抽象成员,实体方法,抽象方法. 如果需要混入的特质不止一个用with关键字. 带有特质的对象:(特质可 ...
- 死磕 java线程系列之自己动手写一个线程池(续)
(手机横屏看源码更方便) 问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...
- IMongoQuery的使用-C#
一.Mongodb的IMongoQuery的使用 引用命名空间:MongoDB.Driver;MongoDB.Driver.Builders; Query.All("name", ...
- 寻找子串位置<codevs>
KMP板子题; 如果不会可以参考其他算法书 代码: #include<iostream> #include<stdio.h> #include<stdlib.h> ...
- UVA - 12099 The Bookcase
No wonder the old bookcase caved under the massive piles of books Tom had stacked on it. He had bett ...
- django创建表单以及表单数据类型和属性
08.15自我总结 关于django的表单不同关系之间的创建 一.不同关系之间的创建 1.一对一 举例 母表:userinfo id name age 1 张三 12 2 李四 58 字表:priva ...
- drf框架接口文档
drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...
- RF分层封装
1.如何管理用例? (1).在ride工具中分层管理用例(案例层.元素层.流程层),提高效率 (2).偶尔运行下,保证脚本能正常跑动 2.用例分层操作 案例层:需要加载流程层.txt资源和Seleni ...
- ZCU104搭建Ubuntu桌面系统-1安装Petalinux
参考教程: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841948/Zynq+UltraScalePlus+MPSoC+-+Ubu ...
- thinkphp5框架笔记(ing)
重新整理下学习tp5手册的笔记.自己再好好看一次tp5的开发手册,学到哪里记到哪里. 0x01 安装 Composer安装 ThinkPHP5支持使用Composer安装 curl -sS https ...