loj2001 「SDOI2017」树点涂色】的更多相关文章

there #include <iostream> #include <cstdio> using namespace std; int n, m, dfn[100005], idx, hea[100005], cnt, uu, vv, siz[100005], fa[100005][19]; int dep[100005], val[400005], dui[100005], opt, ch[100005][2], tag[400005]; int af[100005]; str…
「SDOI2017」树点涂色 我sb的不行了 其实一开始有一个类似动态dp的想法 每个点维护到lct树上到最浅点的颜色段数,然后维护一个\(mx_{0,1}\)也就是是否用虚儿子的最大颜色 用个set维护一下虚儿子 但是啊,我发现搞这个区间改颜色的时候,虚儿子好像得用树套树维护,我当场就不行了... 每个点如果维护到根的颜色段数\(f\) 然后发现啊,这个你如果用一个lct的一个子树维护同一种颜色,在你access的时候实变虚或者虚变实对子树有一个+1或者-1 然后额外在外面开一个线段树维护子树…
树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x: 在以x为根的子…
题面 传送门 思路 $LCT$ 我们发现,这个1操作,好像非常像$LCT$里面的$Access$啊~ 那么我们尝试把$Access$操作魔改成本题中的涂色 我们令$LCT$中的每一个$splay$链代表同一种颜色的一条链,那么$Access(u)$就相当于把这一段变成同一种颜色 注意这个东西能成立,是因为每次涂上的都是新的一种颜色(所以如果有$m$种颜色,每次涂其中一种,可能重复的之类的就不能这么做了) 线段树 接下来我们解决询问的问题:什么结构能维护链上信息和子树信息(同时)?当然是线段树了~…
[Sdoi2017]树点涂色 题意:一棵有根树,支持x到根染成新颜色,求x到y颜色数,求x子树里点到根颜色数最大值 考场发现这个信息是可减的,但是没想到lct 特意设计成lct的形式! 如何求颜色数? 维护一个点和父亲的颜色是否一样,不一样为1,就是前缀和.考虑相邻的思想和那道"水位线"有点像 x到y的答案就是\(S_x + S_y - 2*S_{lca} + 1\) 一个点到根染新颜色,对应了lct的access操作,重边就是一样轻边就是不一样,修改轻重边就是子树加,其他两个操作单点…
P3703 [SDOI2017]树点涂色 链接 分析: 首先对于询问,感觉是线段树维护dfs序,每个点记录到根的颜色个数.第二问差分,第三问区间取max. 那么考虑修改,每次将一个点的颜色变成和父节点的颜色一样的过程中,这个点的子树内都会-1. 这个修改的过程我们可以认为是修改边的过程,将一些边设为1,一些边设为0,那么一次修改对于一个点就是将原来1的边设为0,现在的边设为1. 1和0类似lct中实边与虚边,所以可以lct维护当前那些边是1,那些是0. 感觉跟个暴力似的,但是lct中access…
[LG3703][SDOI2017]树点涂色 题面 洛谷 题解 更博辣,更博辣!!! 猪年的第一篇博客 一次只能染根到\(x\),且染的颜色未出现过 这句话是我们解题的关键. 设\(x\)到根的颜色数为\(f(x)\),则\(u\)到\(v\)的颜色数:\(f(u)+f(v)-f(lca_{u,v})+1\) 想一想,为什么? 很显然,如果没有\(1\)操作,我们直接树剖维护一下就可以了. 但是现在有了\(1\)操作... 这个\(1\)操作,其实是拉一条从\(x\)到根的链,染成一种颜色 这是…
4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 692  Solved: 408[Submit][Status][Discuss] Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种…
[BZOJ4817][Sdoi2017]树点涂色 Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作…
4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 629  Solved: 371[Submit][Status][Discuss] Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种…
「NOI2013」树的计数 这什么神题 考虑对bfs重新编号为1,2,3...n,然后重新搞一下dfs序 设dfs序为\(dfn_i\),dfs序第\(i\)位对应的节点为\(pos_i\) 一个暴力是枚举bfs的分层,然后检查合法性. 但是我们注意到一个事情,节点\(i\)与节点\(i-1\)是否在同一层,是不是具有独立性呢? 设\(s_i\)表示\(i\)与\(i+1\)是否在同一层,当\(s_i=1\)时,表示不在同一层. 那么 \(s_1=1\),显然 若区间\([l,r]\)是同层的,…
「ZJOI2017」树状数组(二维线段树) 吉老师的题目真是难想... 代码中求的是 \(\sum_{i=l-1}^{r-1}a_i\),而实际求的是 \(\sum_{i=l}^{r}a_i\),所以我们直接判断 \(a_{l-1}\) 和 \(a_r\) 是否相等就行了. 我们用二维线段树,一维存左端点 \(l\),一维存右端点 \(r\),里面存 \(a_l=a_r\) 的概率. 若 \(a\in [1,l-1],b\in [l,r]\),操作不在 \(b\),概率为 \(1-p\) 若 \…
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写的. 大值思路是对每个子树维护成一个大节点,存一些根啊,深度啊,到大节点根距离啊,节点编号范围啊之类的信息. 然后发现维护相对节点标号大小是个区间第k大,得对dfs序建一颗主席树 然后每次询问倍增跳一跳,讨论个几种情况之类的. ps:别吐槽名字 Code: #include <cstdio> #i…
目录 题目链接 题解 代码 题目链接 loj#2665. 「NOI2013」树的计数 题解 求树高的期望 对bfs序分层 考虑同时符合dfs和bfs序的树满足什么条件 第一个点要强制分层 对于bfs序连续的a,b两点,若a的bfs序小于b的bfs序,且a的dfs序大于b的,那么它们之间肯定要分层,对答案贡献为1 对于dfs序连续的a,b两点,若a的dfs序小于b的,且a的bfs序也小于b,那么它们的深度差不超过1,也就是说它们在的bfs序上之间最多分一层 先把前两个条件都判一下,然后把第2个条件…
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 学校组织了一次新生舞会,Cathy 作为经验丰富的老学姐,负责为同学们安排舞伴. 有 n nn 个男生和 n nn 个女生参加舞会,一个男生和一个女生一起跳舞,互为舞伴.Cathy 收集了这些同学之间的关系,比如两个人之前是否认识,计算得出 ai,j a_{i, j}a​i,j​​,表示第 i ii…
[BZOJ4817]树点涂色(LCT,线段树,树链剖分) 题面 BZOJ Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值.…
「模板」 树链剖分 HLD 不懂OOP的OIer乱用OOP出人命了. 谨此纪念人生第一次类套类. 以及第一次OI相关代码打过200行. #include <algorithm> #include <cstdio> #include <cstring> using std::swap; const int MAXN=100010,MAXM=200010; int n,m,rt,P; class HLD { public: HLD(void) { num=cnt=0; me…
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 20170408 #define ll long long struct MatrixType { int n,m; ll ai[][]; void mem(int n_,int m_) { n=n_,m=m_; ;i<=n;i++) ;v<=m;v++) ai[i][v]=; } MatrixType op…
「JLOI2012」树 传送门 不得不说这题的数据是真的水... 我们可以想到很明确的一条思路:枚举每一个点向根节点跳,知道路径和不小于 \(s\),恰好等于 \(s\) 就直接加答案. 跳的过程可以用倍增搞,但是暴力跳也可以过(这棵树的高度比较友好啊) 我只给了暴力的代码,倍增的懒得去写了... 参考代码: /*-------------------------------- Code name: B.cpp Author: The Ace Bee This code is made by T…
「ZJOI2017」树状数组 以下均基于模2意义下,默认\(n,m\)同阶. 熟悉树状数组的应该可以发现,这题其实是求\(l-1\)和\(r\)位置值相同的概率. 显然\(l=1\)的情况需要特盘. 大暴力 对于\(l=1\)的情况,可以发现一个操作不会产生影响当且仅当增加\(r\)的值,而其他情况会改变\(l-1\)或\(r\). 对于\(l!=1\)的情况: ​ 针对一次修改区间\([ql,qr]\). \([ql,qr]\)包含\(l-1,r\),那么有\(\displaystyle 2…
题目大意:略 涂色方式明显符合$LCT$里$access$操作的性质,相同颜色的节点在一条深度递增的链上 用$LCT$维护一个树上集合就好 因为它维护了树上集合,所以它别的啥都干不了了 发现树是静态的,可以用$dfs$序搞搞 把问题当成树上节点涂色会很麻烦 但只有相邻的不同颜色节点才会对答案产生影响 所以我们把涂色当成一种连边/断边操作 这样,问题就容易解决得多了 维护一个数组$f_{x}$表示$x$节点到根的路径上一共有$f_{x}$种颜色,$f_{x}-1$条断边 显然它的初始值就是节点x的…
题目大意 有一棵\(n\)(\(n\leq10^5\))个节点的树,每个点有颜色\(c\),一开始所有颜色互不相同 要进行\(m\)(\(m\leq10^5\))次操作,每次操作是以下三种中的一种: 1.给出点\(x\),将点\(x\)到根路径上所有点的染成一种没出现过的颜色 2.给出点\(x\),\(y\),询问点\(x\)到\(y\)的简单路径上有多少种颜色 3.给出点\(x\),询问点\(x\)的子树中到根路径上颜色种类最多的点 题解 把1操作看成LCT的access操作,2操作就相当于询…
传送门 注意到每一次\(1\ x\)操作相当于一次LCT中的access操作.由LCT复杂度证明可以知道access的总次数不会超过\(O(nlogn)\),我们只需要模拟这个access的过程并在其中动态统计每一个点的答案. 我们考虑在虚实边切换的过程中即时更新答案.设当前即将把\(y \rightarrow x\)的虚边转换为实边,设此时\(x\)的实儿子为\(p\).那么对于\(p\)及其子树,所有点到根的路径经过的颜色数量均\(+1\):对于\(y\)及其所有点的子树,它们经过的颜色的数…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4817 https://loj.ac/problem/2001 题解 可以发现这个题就是 bzoj3779 重组病毒 的弱化版. 可以这样考虑.对于每一次染色操作,都是把 \(x\) 点到根的路径上的点全部染成一种颜色. 我们考虑用一个东西来记录下来同色的点,可以发现这个操作和 LCT 的 access 操作很像.如果用 LCT 来维护的话,那么就是一个 splay 记录一堆同色的点. 然后…
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作 Input 第一行两个数n,m. 接下来n-1…
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作 Input 第一行两个数n,m. 接下来n-1…
题目描述 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作 输入 第一行两个数n,m. 接下来n-1行,每行两个数a,b,表示…
Description: Bob有一棵\(n\)个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob可能会进行这几种操作: \(1\) \(x\) 把点\(x\)到根节点的路径上所有的点染上一种没有用过的新颜色. \(2\) \(x\) \(y\) 求\(x\)到\(y\)的路径的权值. \(3\) \(x\) 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最…
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作 Input 第一行两个数n,m. 接下来n-1…
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色. 2 x y: 求x到y的路径的权值. 3 x y: 在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值. Bob一共会进行m次操作   Input 第一行两个数n,m. 接下来n…