【杂题】[CodeForces 1172E] Nauuo and ODT【LCT】【口胡】
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】【口胡】的更多相关文章
- Codeforces 1172E Nauuo and ODT [LCT]
Codeforces ZROI那题是这题删掉修改的弱化版--ZROI还我培训费/px 思路 按照套路,我们考虑每种颜色的贡献,然后发现不包含某种颜色的路径条数更容易数,就是删掉该颜色的点后每个连通块大 ...
- CF 1172E Nauuo and ODT ——LCT
题目:http://codeforces.com/contest/1172/problem/E LCT好题. 考虑对每个颜色求出 “不是该颜色的点组成的连通块的 siz2 之和” .每个颜色用 LCT ...
- 【CodeForces】1172E. Nauuo and ODT
题解 看了一遍题解(以及代码)但是没写代码-- 后来做梦的时候忽然梦到了这道题--意识到我需要补一下-- 这道题就是,对于每种颜色,把没有染成这种颜色的点标成黑点,然后计算每个联通块的平方 然后每个点 ...
- CF1172E Nauuo and ODT LCT
自己独立想出来的,超级开心 一开始想的是对于每一个点分别算这个点对答案的贡献. 但是呢,我们发现由于每一条路径的贡献是该路径颜色种类数,而每个颜色可能出现多次,所以这样就特别不好算贡献. 那么,还是上 ...
- [OI笔记]杂题整理1(基础篇~)
算是开学第四周啦,之前的三周大概过了一遍基础图论和数学相关的内容.这篇随笔打算口胡一些近期做感觉比较好的数学相关的题目 因为这段时间主要是看紫书学的,所以其实会有些出自UVA的例题,如果需要题目但是觉 ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- 【CF1172E】Nauuo and ODT(Link-Cut Tree)
[CF1172E]Nauuo and ODT(Link-Cut Tree) 题面 CF 给你一棵树,每个节点有一个颜色. 定义一条路径的权值为路径上不同颜色的数量.求所有有向路径的权值和. 有\(m\ ...
- CF1172E Nauuo and ODT
CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...
随机推荐
- Linux学习笔记(16)Linux前后台进程切换(fg/bg/jobs/ctrl+z)
关键词:Linux前后台进程切换,linux进程切换 fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& ...
- opencv学习之读取图像-imread函数
序 想要完整全面地学习opencv,仅凭阅读samples的示例源码是不够的.毕竟opencv是一个拥有非常多函数的程序库,所以在每学习一个函数时,芒果觉得有必要记录下来,分享给有需要的同学.于是,就 ...
- 蚂蚁分类信息商家发布文章、商品外链及远程图片自动添加nofollow属性
蚂蚁商户发布文章.商品是可以添加外链或者直接用外部图片,但是这对分类网站运营不利. 所以要对外链进行过滤,演示网站保洁,蚂蚁分类的源码. 下面就说下怎么处理自动给外链自动加上nofollow属性. 1 ...
- 从入门到自闭之Python名称空间
名称空间: 内置空间:python解释器自带的一块空间 全局空间:py文件中顶格写的就是全局空间 局部空间:函数体中就是局部空间 加载顺序: 内置空间 全局空间 局部空间 # def func(): ...
- Elasticsearch入门教程(六):Elasticsearch查询(二)
原文:Elasticsearch入门教程(六):Elasticsearch查询(二) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...
- C# 面向对象6 之前的复习
复习练习 THIS:调用当前类的构造函数
- Redis原子计数器incr,防止并发请求
转自:https://blog.csdn.net/Roy_70/article/details/78260826 一.前言在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当 ...
- Arduino控制LED灯(开关控制)
问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...
- 【Activiti】为每一个流程绑定相应的业务对象的2种方法
方式1: 在保存每一个流程实例时,设置多个流程变量,通过多个流程变量的组合来过滤筛选符合该组合条件的流程实例,以后在需要查询对应业务对象所对应的流程实例时,只需查询包含该流程变量的值的流程实例即可. ...
- Vue使用Elementui修改默认最快方法!
相信大家都需要过,在Vue中使用Elementui的时候,遇到最多也最蛋疼的问题就是修改默认样式,接下来直奔主题: // template <el-progress :text-inside=& ...