【杂题】[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\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...
随机推荐
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...
- 2018.08.15【2018提高组】模拟A组 比赛总结
总结 T1 这题我一看,哇!好简单啊! 直接建立每一个字母的映射就可以了. 我很快就打完了程序,跳到下一题. 等到比赛快结束时,我才发现了一个可怕的数据: 1 abcdefghijklmnopqrst ...
- Yii2.0中使用Union查询,并使用join,支持分页
$query1 = Class1::find()->where($where); $query2 = Class1::find()->alias('a')->join('left j ...
- CVE-2018-19824漏洞学习
简介 在Linux内核4.19.6之前,本地用户可以通过在Sound / USB /card.c.的usb_audio_probe中错误处理一个恶意USB声音设备(没有接口)来利用ALSA驱动程序中的 ...
- cut--修剪小能手
cut命令 cut原理:以每一行位一个处理对象. 参数选项 解释说明 -b 以字节为单位进行分割 -c 以字符为单位进行分割(对切割中文有奇效) -d 自定义分隔符号,默认以tab为分隔符 1:-b ...
- js之运算符(位运算符)
一.概念 位运算在数字底层(表示数字的32个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的,但是它很不直观,许多场合不能够使用.大多数语言都提供了按位运算符,恰当的使用按位运算符 ...
- avascript中实现垃圾桶的功能
javascript中实现垃圾桶的功能,就像折垃圾桶在拖动目标上触发事件 (源元素):ondragstart - 用户开始拖动元素时触发ondrag - 元素正在拖动时触发ondragend - 用户 ...
- 好用的 python 工具集合
图标处理小程序, 妈妈再也不用担心我不会制作图标了 # PythonMargick包可以到Unofficial Windows Binaries for Python Extension Packag ...
- CentOS MySql5.6编译安装
生产环境中,mysql服务器上边最好什么服务都不要再安装!!! 一.准备工作: # yum -y install make gcc-c++ cmake bison-devel ncurses-deve ...
- 从FBV到CBV四(访问频率限制)
比如我们有一个用户大转盘抽奖的功能,需要规定用户在一个小时内只能抽奖3次,那此时对接口的访问频率限制就显得尤为重要 其实在restframework中已经为我们提供了频率限制的组件 先捋一下请求到AP ...