省选成功成为河北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 自己出的题目 解题报告的更多相关文章

  1. cojs 简单的区间问题 解题报告

    新学了些弦图和区间图的新玩意,于是就想着出一道题目 其实这道题不用弦图和区间图的理论也是可以做的 首先考虑第一问,第一问是一个NOIP普及组水平的贪心 我们把区间按照右端点从小到大排序,之后从头到尾扫 ...

  2. cojs 疯狂的求和问题 解题报告

    QAQ 好久不在cojs上出题了 最近学了点新科技,于是就做成题来分享了 这道题是要求simga(i^k) 那么就先说说部分分的算法吧: 10分: 直接暴力就可以了,时间复杂度O(nlogk) 30分 ...

  3. cojs 简单的求和问题 解题报告

    一个上午写了两个数据生成器,三个暴力和两个正解以及一个未竣工的伪正解思路 真是累死本宝宝了 首先这个题目暴力我的数据是有很多良心分的 但是不同的暴力拿到的分数也会有所差距,由于是题解就不说暴力怎么写了 ...

  4. cogs 自己出的题目 题解报告

    第一题很简单嘛,就是裸的动态树分治嘛 对于每一层的重心维护子树路径的信息和子树到上一层重心的点的信息 空间复杂度O(nlogn) 对于每一层我们按dis排序,之后记录军队数量的前缀和 查询的时候我们只 ...

  5. leetcode并发题目解题报告JAVA版

    一.Print in Order Suppose we have a class: public class Foo { public void first() { print("first ...

  6. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

  7. 【九度OJ】题目1124:Digital Roots 解题报告

    [九度OJ]题目1124:Digital Roots 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: T ...

  8. 【九度OJ】题目1064:反序数 解题报告

    [九度OJ]题目1064:反序数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1064 题目描述: 设N是一个四位数,它的 ...

  9. 【九度OJ】题目1183:守形数 解题报告

    [九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...

随机推荐

  1. WP开发笔记——页面传参

    WP APP页面与页面之间参数的传递可以通过程序的App类设置全局变量. 由于App 类继承自Application类,而通过Application的Current属性可以获取到与当前程序关联的App ...

  2. Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置)

    由于本人比较懒,所以一般都是用xampp的直接拿来改的…………(当然xampp中一般php版本都是比较新的用的过程中请大家注意哈,可能会和老版本冲突) 此次除了使用xampp外,还扩展了sphinx, ...

  3. 利用Unicode属性移除文本中的标点符号

    原文:http://bbs.csdn.net/topics/270033191   摘抄: str = str.replaceAll("[\\pP‘’“”]", "&qu ...

  4. Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout

    如果是为了兼容低版本的Android系统,则需要引用Android Material Design的扩展支持库,我在之前的一篇文章张,较为详细的说明了如何导入Android Material Desi ...

  5. How to add EDT relation table[AX2012]

    setp 1. First create New Edit. setp 2.Create New Table First Table Name is NParentRel then drag and ...

  6. Oracle 10g RAC 启动与关闭

    一. 检查共享设备 一般情况下,存放OCR和Voting Disk的OCFS2 或者raw 都是自动启动的. 如果他们没有启动,RAC 肯定是启动不了. 1.1 如果使用ocfs2的 检查ocfs2 ...

  7. 第22章 项目3:万能的XML

    Mix-in:混入类,是一种Python程序设计中的技术,作用是在运行期间动态改变类的基类或类的方法,从而使得类的表现可以发生变化.可以用在一个通用类接口中. 在实践一个解析XML文件的实践中,体会动 ...

  8. wpf MVVM ViewModel 关闭View显示

    上次说到了不同wpf窗体之间的交互,这个在MVVM模式之中用起来会方便很多 下面我来说下在ViewModel中关闭View的方法,其实也很简单的,注释照样不写,一看就懂的 public partial ...

  9. 无法打开物理文件xxx.mdf 操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120) 的解决方法

    问题描述:在附加数据库到sql server时,附加不上,出现如下图所示的错误 解决方法:找到xxx.mdf和xxx_log.ldf文件, 点击“右键”->“属性”->"安全&q ...

  10. mouse_driver

    1:function.h #ifndef FUNCTION_H#define FUNCTION_H #define DRIVER_FUNCTION_ADD_DEVICE#define DRIVER_F ...