Description

给出一棵n个节点的树,每个点有一个1~n的颜色

有m次操作,每次操作修改一个点的颜色
需要在每次操作后回答树上\(n^2\)条路径每条路径经过的颜色种类数和。

\(n,m<=400000\)

Solution

挺有意思的一个套路

首先我们单独计算每种颜色的贡献,对于每种颜色的点集分开考虑,我们需要计算至少经过了其中一个点的路径条数。
正难则反,考虑计算一个点都没经过的路径条数,那就是将点集删去后剩余连通块的大小平方和。

考虑这样一个模型
对于原本每种颜色有一个黑白两色的树,需要支持在某棵树上颜色翻转,求白连通块的大小平方和。
黑点总个数为n

如果只有一棵树,那很好办,直接用个LCT维护白连通块,对于每个点开个虚点连儿子即可。
但这里白点总个数是\(O(n^2)\)的

原题解给出了这样一个精妙的做法。(翻译一遍题解
先定一个树根

我们维护所有的黑连通块,每个黑连通块深度最浅的点的父亲记为这个连通块的顶点,(对于树根我们也开一个0号节点),显然顶点一定是白的。

LCT的时候,我们将顶点相同的所有节点看做在一个连通块内,事实上他们不一定连通。

现在对于每个节点都记录两个值,一个是连通块中的子树大小,一个是所有儿子的子树大小的平方和。
答案显然就是所有顶点的第二个值的和。

这样颜色反转时,我们只需要讨论这个点是黑点还是白点,黑点的话就cut父亲,显然这个点的信息不变,但这个点会成为顶点,因此更新答案。

白点的话就link父亲,此时父亲变成顶点,这个点的信息还是没变,只用修改父亲节点的值。

我们对于每种颜色都按照操作的时间顺序跑一遍,由于总操作数是\(O(m)\)的,因此总共需要用到的点数是\(O(n+m)\)的

我还没去写这道题,感觉具体可以把每种颜色操作一遍,然后回撤到下一种颜色的初始状态,这样总的操作次数仍然是\(O(n+m)\)的。

总的时间复杂度\(O((n+m)\log n)\)

【杂题】[CodeForces 1172E] Nauuo and ODT【LCT】【口胡】的更多相关文章

  1. Codeforces 1172E Nauuo and ODT [LCT]

    Codeforces ZROI那题是这题删掉修改的弱化版--ZROI还我培训费/px 思路 按照套路,我们考虑每种颜色的贡献,然后发现不包含某种颜色的路径条数更容易数,就是删掉该颜色的点后每个连通块大 ...

  2. CF 1172E Nauuo and ODT ——LCT

    题目:http://codeforces.com/contest/1172/problem/E LCT好题. 考虑对每个颜色求出 “不是该颜色的点组成的连通块的 siz2 之和” .每个颜色用 LCT ...

  3. 【CodeForces】1172E. Nauuo and ODT

    题解 看了一遍题解(以及代码)但是没写代码-- 后来做梦的时候忽然梦到了这道题--意识到我需要补一下-- 这道题就是,对于每种颜色,把没有染成这种颜色的点标成黑点,然后计算每个联通块的平方 然后每个点 ...

  4. CF1172E Nauuo and ODT LCT

    自己独立想出来的,超级开心 一开始想的是对于每一个点分别算这个点对答案的贡献. 但是呢,我们发现由于每一条路径的贡献是该路径颜色种类数,而每个颜色可能出现多次,所以这样就特别不好算贡献. 那么,还是上 ...

  5. [OI笔记]杂题整理1(基础篇~)

    算是开学第四周啦,之前的三周大概过了一遍基础图论和数学相关的内容.这篇随笔打算口胡一些近期做感觉比较好的数学相关的题目 因为这段时间主要是看紫书学的,所以其实会有些出自UVA的例题,如果需要题目但是觉 ...

  6. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

  7. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  8. 【CF1172E】Nauuo and ODT(Link-Cut Tree)

    [CF1172E]Nauuo and ODT(Link-Cut Tree) 题面 CF 给你一棵树,每个节点有一个颜色. 定义一条路径的权值为路径上不同颜色的数量.求所有有向路径的权值和. 有\(m\ ...

  9. CF1172E Nauuo and ODT

    CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...

随机推荐

  1. Linux下面查看网卡的信息

    查看linux下面网卡的速度信息 Study From 百度知道 (懒得翻墙) 1. centos机器 安装的比较全(个人比较懒 没有使用core最小化安装, 避免出问题麻烦 公司网络太垃圾) 使用 ...

  2. iframe在firefox下的无法正常target问题

    今日在改一个网站的时候碰到个奇葩的问题. 把网站按照结构划分,做了个主页面,嵌入iframe,设定该iframe的name,主页面上的链接使用target保证在iframe中打开该链接. 听上去很常规 ...

  3. Redis数据库连接

    1.建立maven项目pox.xml导入依赖包 <dependency> <groupId>io.lettuce</groupId> <artifactId& ...

  4. Linux软链接硬链接的区别

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  5. Android渐变色xml配置

    这里渐变色: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=&quo ...

  6. Java中创建的对象多了,必然影响内存和性能

    1, Java中创建的对象多了,必然影响内存和性能,所以对象的创建越少越好,最后还要记得销毁.

  7. Laravel-admin form 表单是增加或者修改

    Laravel-admin 实现 form 表单是增加或者修改的三种方法,应用情景:1.新增或者修改 form 展示的表单不同:2.新增或者保存前后回调进行其他的操作 1. use Illuminat ...

  8. Hive 教程(一)-安装与配置解析

    安装就安装 ,不扯其他的 hive 依赖 在 hive 安装前必须具备如下条件 1. 一个可连接的关系型数据库,如 Mysql,postgresql 等,用于存储元数据 2. hadoop,并启动 h ...

  9. Ruby初见

    一. 简介 Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License. 二 ...

  10. Codeforces 1229C. Konrad and Company Evaluation

    传送门 首先考虑如何算出答案,考虑枚举中间那个点,显然每个点作为中间的点的次数为入度乘出度 所以答案就是每个点的入度乘出度之和 然后每个点开一个 $vector$ 维护从它出去的点数,每次修改的时候直 ...