CF1172E Nauuo and ODT】的更多相关文章

CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色.颜色是\(c\)的标黑,否则标白,要算的就是黑连通块的\(\sum siz^2\) 对每种颜色用LCT维护连通块.拿出有关的所有操作,动态维护所有连通块的\(\sum siz^2\). (这里有一个trick,黑点向父亲连边,连通块就是连通块去掉根.) 要维护的东西有实子树大小.虚子树大小和虚子树…
自己独立想出来的,超级开心 一开始想的是对于每一个点分别算这个点对答案的贡献. 但是呢,我们发现由于每一条路径的贡献是该路径颜色种类数,而每个颜色可能出现多次,所以这样就特别不好算贡献. 那么,还是上面那句话,由于算的是颜色种类,所以我们可以对每一个颜色种类单独算贡献. 即不以点为单位去算,而是以颜色种类为单位去算. 假设要算颜色为 $r$ 的贡献,那么必须保证每一个路径至少有一个端点在颜色 $r$ 构成的连通块中. 这句话等同于不能出现两个端点都在非 $r$ 连通块的路径,即 $n^2-\su…
分析 lxl大毒瘤. 感谢Ouuan等CNOIER提供了这么好的比赛. 这里只是把官方题解复述一遍,可以直接去看官方题解:点我. 考虑将问题转化为对于每个颜色,求出没有经过这个颜色的节点的路径有多少条,这问题的答案是: \[\sum_{i=1}^{n}(n^2-\sum_{G'}siz_{G'}^2)\] 其中\(G'\)是所有不包含颜色为\(i\)的节点的极大连通块. 视颜色为\(i\)的节点为白点,其余为黑点,那么我们现在要做的就是维护一个数据结构,支持: 修改一个节点的颜色. 询问所有黑点…
首先可以转化问题,变为对每种颜色分别考虑不含该颜色的简单路径条数.然后把不是当前颜色的点视为白色,是当前颜色的点视为黑色,显然路径数量是每个白色连通块大小的平方和,然后题目变为:黑白两色的树,单点翻转颜色,维护白色连通块大小平方和,然后根据Auuan大佬的题解,我用了LCT.就是对每个点维护子树.儿子大小平方和,在 link/cut 的时候更新答案.初始化所有点是白色,离线处理每个颜色即可. 这题放在2h比赛上,除了lxl其他人都写不出来(况且lxl还是本题出题人呢) #include<bits…
题目传送门 题目大意 给出一个 \(n\) 个点的树,每个点有颜色,定义 \(\text{dis}(u,v)\) 为两个点之间不同颜色个数,有 \(m\) 次修改,每次将某个点的颜色进行更改,在每次操作后求出: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\text{dis}(i,j) \] \(n,m\le 4\times 10^5\) 思路 好妙的一道题啊!!!看 \(\text{yyb}\) 神仙的博客看到的,花了我一个晚上...而且还是看题解看懂的... 首先我们可以想到…
[CF1172E]Nauuo and ODT(Link-Cut Tree) 题面 CF 给你一棵树,每个节点有一个颜色. 定义一条路径的权值为路径上不同颜色的数量.求所有有向路径的权值和. 有\(m\)次单点颜色修改操作,每次修改之后输出答案. 题解 如果只有黑白两色,我们要求白色的贡献,那么我们可以把所有白色节点删去,那么答案就是每个黑色连通块的\(size\)平方和.考虑怎么动态维护这个东西. 要做的是,一开始我们的所有节点都是黑点,然后有若干次颜色取反操作,每次求黑色连通块的\(size^…
Codeforces ZROI那题是这题删掉修改的弱化版--ZROI还我培训费/px 思路 按照套路,我们考虑每种颜色的贡献,然后发现不包含某种颜色的路径条数更容易数,就是删掉该颜色的点后每个连通块大小的平方和. 由于每种颜色影响到的点之和是\(O(n)\)的,所以我们每种颜色分开考虑,就变成了只有两种颜色的情况. 把这种颜色视为白色,其他颜色视为黑色,那么每个黑色点往父亲连边(1往一个虚拟点连边),就可以在白点处统计贡献. 所以每次改变颜色就只是一个link或cut,用LCT维护. 代码 #i…
题解 看了一遍题解(以及代码)但是没写代码-- 后来做梦的时候忽然梦到了这道题--意识到我需要补一下-- 这道题就是,对于每种颜色,把没有染成这种颜色的点标成黑点,然后计算每个联通块的平方 然后每个点维护,虚儿子黑点的siz,虚儿子的siz的平方,还有splay上的siz和 为了保证最高点是白点,我们新建一个点建到根上面 然后把一个点染黑就相当于断掉所有儿子,然后减去所有虚儿子siz的平方,然后顺着fa找到最高的白点,删掉这个白点原先右边挂着的树,然后再减去这个白点原先右边挂着的部分,这个点再连…
Description 给出一棵n个节点的树,每个点有一个1~n的颜色 有m次操作,每次操作修改一个点的颜色 需要在每次操作后回答树上\(n^2\)条路径每条路径经过的颜色种类数和. \(n,m<=400000\) Solution 挺有意思的一个套路 首先我们单独计算每种颜色的贡献,对于每种颜色的点集分开考虑,我们需要计算至少经过了其中一个点的路径条数. 正难则反,考虑计算一个点都没经过的路径条数,那就是将点集删去后剩余连通块的大小平方和. 考虑这样一个模型 对于原本每种颜色有一个黑白两色的树…
题目:http://codeforces.com/contest/1172/problem/E LCT好题. 考虑对每个颜色求出 “不是该颜色的点组成的连通块的 siz2 之和” .每个颜色用 LCT 维护不是该颜色的点. LCT 维护的一个连通块,其最顶端的点是该颜色,其他部分满足 “不是该颜色” :再维护子树的 siz2 ,就能做了. 注意代码里的 p[ ] 要开 2*n 那么大!!! #include<cstdio> #include<cstring> #include<…
部分摘抄于 FlashHu candy99 所以文章篇幅较长 请有足够的耐心(不是 其实不用学好splay再学LCT的-/kk (至少现在我平衡树靠fhq) 如果学splay的话- 也许我菜吧-LCT靠背板子 pushup靠理解-没救了/kk 简单讲讲LCT 至于树链剖分 建议在LCT之前学(? 反正我blog里也有 一[理论知识] -Link-Cut-Tree(简称LCT)是解决动态树类问题一种数据结构 -Preferred Child:重儿子,重儿子与父亲节点在同一棵Splay中,一个节点最…
摘要 项目开发工具:VS2012旗舰版(.NetFrameWork4.5.1),WIN7 64bit,Oracle 11g 服务器环境:Windows Server2008 R2 64bit,.NetFrameWork4.0,Oracle 11g 项目开发环境:.NetFrameWork4.5,MVC4.0,Entity FrameWork5.0,ODT 因为开发环境跟服务器环境不同,会有一些麻烦. 以下要说明的就是在项目开发完成,发布到服务器上时,遇到的一些问题,以及解决方案. 正文 1.首先…
Mac版ABBYY FineReader OCR文字识别软件识别文档之后,可以将已识别的文本保存到文件中,还可以通过电子邮件发送输出格式受FineReader支持的已识别文本,了解了ABBYY FineReader将识别结果导出为PDF参数设置之后,今天主要讲讲将识别结果导出为DOCX/RTF/ODT格式,都有哪些参数需要注意的. ABBYY FineReader识别文档之DOCX/RTF/ODT导出参数: 1.保留布局 •精确副本 生成格式与原始格式相同的文档.建议对布局复杂的文档使用该选项,…
子树修改+路径修改+单点查询 树链剖分+区间维护即可 由于只有单点查询,我直接用了odt,复杂度还行 #include<bits/stdc++.h> #define endl '\n' #define ll long long #define ull unsigned long long #define fi first #define se second #define pii pair<int,int> #define all(x) x.begin(),x.end() #def…
题意 给你一个长为 \(n\) 的序列 \(a_i\) 需要支持四个操作. \(1~l~r~x:\) 把 \(i \in [l, r]\) 的 \(a_i\) 加 \(x\) . \(2~l~r~x:\) 把 \(i \in [l, r]\) 的 \(a_i\) 赋值成 \(x\) . \(3~l~r~x:\) 求 \([l, r]\) 区间的第 \(x\) 小元素. \(4~l~r~x~y:\) 求 \((\sum_{i = l}^{r} {a_i}^x) \mod y\) . 一共会操作 \…
题意 题目链接 Sol ODT板子题. 操作1直接拆区间就行. #include<bits/stdc++.h> #define fi first #define se second const int MAXN = 2e5 + 10; using namespace std; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1…
题解 题意 题目链接 Sol ODT板子题..... // luogu-judger-enable-o2 #include<bits/stdc++.h> #define LL long long #define Fin(x) freopen(#x".in", "r", stdin); #define Fout(x) freopen(#x".out", "w", stdout); #define fi first #…
传送门 ODT水题. 支持区间01赋值,区间填补(把区间[l,r][l,r][l,r]从左往右数kkk个1都变成0),区间查询最长连续1个数. 思路: 区间填补操作感觉不是很好弄,写线段树的神仙可以套一个二分来写. 而对于写odtodtodt的朋友们来说就很easyeasyeasy了,直接从左往右遍历到第kkk个1所在区间覆盖一波即可(详见代码). 不会ODTODTODT的点这里 代码: #include<bits/stdc++.h> #define ri register int using…
传送门 ODT水题(当然可以上线段树) 支持区间01覆盖,询问全局1的个数. 思路:直接上ODTODTODT. 不会的点这里 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<&…
文章目录 ODT简介 实现前提&&实现原理 初始化 split操作 assign操作 其它操作 区间第k小 区间加 区间所有数的k次方和 几道水题 ODT简介 ODT(old driver tree 老驱动树)又名珂朵莉树是由codeforcescodeforcescodeforces上一位叫做ODTODTODT的用户提出的一种基于平衡树的暴力数据结构. 这个数据结构的玄妙之处在于它并没有稳定的时间复杂度,因此只有在数据随机/水的情况下才会有较好的表现. 实现前提&&实现原…
ODT ( On-DieTermination ,片内终结)ODT 也是 DDR2 相对于 DDR1 的关键技术突破,所谓的终结(端接),就是让信号被电路的终端吸 收掉,而不会在电路上形成反射, 造成对后面信号的影响. 顾名思义, ODT 就是将端接电阻移植 到了芯片内部,主板上不再有端接电路.在进入DDR 时代, DDR 内存对工作环境提出更高的要求,如 果先前发出的信号不能被电路终端完全吸收掉而在电路上形成反射现象, 就会对后面信号的影响造成 运算出错.因此目前支持DDR主板都是通过采用终结…
题意 题目链接 Sol ODT板子题.就是用set维护连续段的大暴力.. 然鹅我抄的板子本题RE提交AC??.. 具体来说,用50 50 658073485 946088556这个数据测试下面的代码,然后在79行停住,看一下bg和i的值会发生神奇的事情.. 问题已解决,确实是那位博主写错了, 只要把split(l)和split(r + 1)反过来就行了 #include<bits/stdc++.h> #define LL long long #define int long long #def…
Prelude ODT这个东西真是太好用了,以后写暴力骗分可以用,写在这里mark一下. 题目链接:ヽ(✿゚▽゚)ノ Solution 先把原题解贴在这里:(ノ*・ω・)ノ 简单地说,因为数据是全部随机的,所以一定会有特别多的区间set,就会有很多数字相同,那么我们暴力把相同的数字合并成一个点,合并完之后数组就变得很短,然后对于询问暴力做就可以了. 具体复杂度是什么我也不会证明qwq,所以就把由乃的题解贴上来了qwq,感觉很靠谱的样子. 题解中给的是用STL的set维护缩点后的数组,我感觉不是很…
本文由Suzzz原创,发布于 http://www.cnblogs.com/Suzzz/p/4129368.html,转载请保留此声明 ReText是一个linux下的markdown和reStructedText的编辑器,支持实时预览.输出为pdf.html.ODT等功能. 直接上效果图 查看生成的 html 代码…
前言 \(ODT\),即珂朵莉树,又称老司机树(\(Old\ Driver\ Tree\)). 它是一个十分暴力的数据结构,可以用于各种乱搞,也非常的实用. 当然,这全要基于一个基本条件:数据随机. 主要思想 \(ODT\)的主要思想就是把一个元素完全相同的区间合并成一个节点,然后用\(set\)维护(我也不知道为什么称其为"树"). 而在数据随机的情况下,节点的期望个数是很少的,因此复杂度也就比较低. 核心操作: \(Split\)操作 \(ODT\)的核心操作就是\(Split\)…
点此看题面 大致题意: 给你一个\(01\)序列,让你支持区间赋值.区间取反.区间求和以及求一段区间内最多有多少连续的\(1\)这些操作. \(ODT\) 这道题正解似乎是线段树,但码量较大,而且细节也很多. 而用\(ODT\)来做这道题就非常简单了. 区间赋值 就相当于\(ODT\)的\(Assign\)操作. 区间取反 暴力扫一遍,将每个点的值异或\(1\)即可. 区间求和 暴力扫一遍,统计每个点的长度乘以权值的和即可. 求一段区间内最多有多少连续的\(1\) 暴力扫一遍,统计有多少个连续的…
点此看题面 大致题意: 有单点修改数字和区间着色两种修改操作,询问你某段区间内包含所有颜色且数字和最小的子区间的数字和,或某段区间内没有重复颜色且数字和最大的子区间的数字和.数据随机. \(ODT\)维护颜色 看到区间着色且题目中强调数据随机,容易想到使用\(ODT\)去求解. 于是,我们就可以考虑用\(ODT\)来对颜色进行维护. 线段树维护数字和 但是考虑到要求区间数字和,\(ODT\)就很难搞了. 考虑到我们其实可以对于每个询问,每次找到一个合法区间再询问数字和更新答案. 也就是说,可以把…
孔爷的杂题系列:LCT清新题/ODT模板题 题目大意 定义一颗无根树的燃烧序列为:每次选取编号最小的叶子节点形成的序列. 要求支持操作:查询一个点$u$在燃烧序列中的排名:将一个点的编号变成最大 $n \le 200000$ 题目分析 首先初始的燃烧序列容易构造,那么考虑进行一次up操作对序列会产生什么影响. 这里对$3$进行一次$up$,得到下图. 容易发现,记上一个版本序列最后一个元素为$las$,进行$up\,\,\,x$相当于是把路径$(las,x)$的答案变成从$las$到$x$的等差…
仿佛没用过std::set Seniorious has n pieces of talisman. Willem puts them in a line, the i-th of which is an integer ai. In order to maintain it, Willem needs to perform m operations. There are four types of operations: 1 l r x: For each i such that l ≤ i …
链接:https://codeforces.com/contest/1173/problem/C 题意: Nauuo is a girl who loves playing cards. One day she was playing cards but found that the cards were mixed with some empty ones. There are nn cards numbered from 11 to nn, and they were mixed with…