cojs 自己出的题目 解题报告
省选成功成为河北B队队长QAQ 真是忧桑
所以在cojs上出了一套鬼畜的关于树的套题
黑白树:
我们先不考虑R操作
设x是u的祖先,那么fa(x)的贡献显然是 fa(x)*(sz(fa(x))-sz(x))
之后我们对于这个求和就是答案辣
然而这一脸不可做,我们化简一下,考虑每个sz(x)的贡献
sz(x)的贡献化简后可以发现 为 (x-fa(x))*sz(x)
然后我们就很容易用树链剖分完成更改和查询操作啦
之后我们考虑R操作
因为树上距离公式为 dis(u)+dis(v)-2*dis(lca(u,v))
最后一项为偶数,显然对奇偶性没有影响
那么当dis(u)为奇数时,这个操作等价于将所有dis值为偶数的点翻转
dis(u)为偶数时同理
又注意到对于R操作最多只会有4种形态
奇偶都不翻,奇偶都翻,奇翻偶不翻,奇不翻偶翻
不妨建立四颗线段树分别维护这四种形态
每次更改将四颗线段树都更改,查询在对应情况下查询即可
这样R操作我们可以O(1)的更换查询的线段树进而完成更改
树黑白:
这套题中最水的一道 目前为止我知道两种做法
第一种做法是动态点分治
对于每一层的重心维护子树中黑点到他的距离和和子树黑点个数
还要维护子树中黑点到他父亲的距离
这样每次查询我们只需要加上当前层的贡献,减去父亲层的贡献就可以啦
更改的时候暴力更改相关的子树就可以了
第二种做法是树链剖分
树上距离公式dis(u)+dis(v)-2*dis(lca(u,v))
显然sigma(dis(u))和tot*dis(v)我们都是已知量
问题就变成了维护dis(lca(u,v))
我们考虑每条边的贡献,设这条边的边权为w,儿子一端为x
那么贡献就是w*sz(x)
用树链剖分维护即可,做法跟黑白树差不多
树白黑:
首先我们考虑如果没有[L,R]的做法
我们可以用DFS序+树状数组维护子树和
每次修改单点加减
之后对于查询我们从查询点向上倍增
跳到离u最近的祖先且子树和不为0的位置
这个位置显然就是答案
之后我们发现子树和是具有可减性的
那么做法就很显然了,用DFS序+主席树维护
继续沿用上面的做法就可以了
白黑树:
数据很难做,最后也做得不是很成功
我们考虑树链剖分
对于每次修改,我们可以将u到根节点所有值+1或者-1
这样我们会发现父亲节点的值一定>=孩子节点的值
而当父亲节点的值>孩子节点的值的时候,显然存在一个黑点和当前点的LCA为这个父亲节点
我们定义这样的情况为一个分界点,那么显然我们要求的是深度最小的分界点
可以发现这个分界点一定是u到根节点路径中的最大值的位置
当然值相同的点我们要取深度较大的点
之后我们就可以利用树链剖分完成链修改和链查询了
UPD_1:神一样的lyc提供了一种更好的做法
我们会发现深度最小的LCA的子树一定恰好包含所有黑点
那么问题就是求离u最近的包含所有的黑点的祖先
跟树白黑一样倍增即可
UPD_2:这样子的话和树白黑一样也可以加大这道题目的难度
可以把解法变成主席树之类的奇怪的东东
不过数据就更加难出了,所以还是这样子吧
cojs 自己出的题目 解题报告的更多相关文章
- cojs 简单的区间问题 解题报告
新学了些弦图和区间图的新玩意,于是就想着出一道题目 其实这道题不用弦图和区间图的理论也是可以做的 首先考虑第一问,第一问是一个NOIP普及组水平的贪心 我们把区间按照右端点从小到大排序,之后从头到尾扫 ...
- cojs 疯狂的求和问题 解题报告
QAQ 好久不在cojs上出题了 最近学了点新科技,于是就做成题来分享了 这道题是要求simga(i^k) 那么就先说说部分分的算法吧: 10分: 直接暴力就可以了,时间复杂度O(nlogk) 30分 ...
- cojs 简单的求和问题 解题报告
一个上午写了两个数据生成器,三个暴力和两个正解以及一个未竣工的伪正解思路 真是累死本宝宝了 首先这个题目暴力我的数据是有很多良心分的 但是不同的暴力拿到的分数也会有所差距,由于是题解就不说暴力怎么写了 ...
- cogs 自己出的题目 题解报告
第一题很简单嘛,就是裸的动态树分治嘛 对于每一层的重心维护子树路径的信息和子树到上一层重心的点的信息 空间复杂度O(nlogn) 对于每一层我们按dis排序,之后记录军队数量的前缀和 查询的时候我们只 ...
- leetcode并发题目解题报告JAVA版
一.Print in Order Suppose we have a class: public class Foo { public void first() { print("first ...
- 【九度OJ】题目1026:又一版 A+B 解题报告
[九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...
- 【九度OJ】题目1124:Digital Roots 解题报告
[九度OJ]题目1124:Digital Roots 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: T ...
- 【九度OJ】题目1064:反序数 解题报告
[九度OJ]题目1064:反序数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1064 题目描述: 设N是一个四位数,它的 ...
- 【九度OJ】题目1183:守形数 解题报告
[九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...
随机推荐
- 匹配一级分类和二级分类 名字和url 里面有玄机
1:要匹配的html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- ASP.NET MVC 表单的几种提交方式
下面是总结一下在ASP.NET MVC中表单的几种提交方式. 1.Ajax提交表单 需要引用 <script type="text/javascript" src=" ...
- RAID 0+1
正如其名字一样RAID 0+1是RAID 0和RAID 1的组合形式,也称为RAID 01. 以四个磁盘组成的RAID 0+1为例,其数据存储方式如图所示:RAID 0+1是存储性能和数据安全兼顾的方 ...
- [大牛翻译系列]Hadoop(14)MapReduce 性能调优:减小数据倾斜的性能损失
6.4.4 减小数据倾斜的性能损失 数据倾斜是数据中的常见情况.数据中不可避免地会出现离群值(outlier),并导致数据倾斜.这些离群值会显著地拖慢MapReduce的执行.常见的数据倾斜有以下几类 ...
- How to understand ReferenceGroup control on Form[AX2012]
在AX2012的Form开发中,微软引入了新的控件ReferenceGroup,它用在Lookup其他表RecId的时候显示更人性化的字段,它的使用还必须从表的索引说起.AX2012的表有这些索引(h ...
- 每日一“酷”之Queue
Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...
- Reactor模式
对象行为类的设计模式,对同步事件分拣和派发.别名Dispatcher(分发器) Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I ...
- Ajax 完整教程
第 1 页 Ajax 简介 Ajax 由 HTML.JavaScript™ 技术.DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序.本文的作者是 ...
- iOS常见问题(4)
一.非ARC内存管理问题. 有些同学在创建项目的时候忘记点ARC了,导致一些成员属性都莫名其妙的释放了.然后出现了一系列莫名其妙的错误. 在滚动UITableView的时候出现野指针错误. 一出现这些 ...
- WPF 多线程处理(5)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 项目的目录: 以下是FileStroage的 ...