SDOI2017树点染色】的更多相关文章

\[SDOI2017 树点染色\] 题目描述 Bob 有一棵 $ n $ 个点的有根树,其中 $ 1 $ 号点是根节点.Bob 在每个节点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是,这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob 可能会进行这几种操作: $ 1  x $,把点 $ x $ 到根节点的路径上的所有的点染上一种没有用过的新颜色: $ 2  x  y $,求 $ x $ 到 $ y $ 的路径的权值: $ 3  x $,在以 $ x $ 为根的子树中选择…
题意:给你一棵树,一开始每个点上的颜色互不相同.三种操作:op1:x到根的路径上的点都染上一种新的颜色.op2:设一条路径的权值为val(x,y),求x到y路径的val.op3:询问x的子树中最大的到根路径val.n<=1e5. 标程: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ; int f[N],prime[N],tot,F[N],ans,p[N],n,m,nxt,u[N],fi[N];…
题目链接 发现1操作很像lct中的access,然后它每次染的又是一个新颜色,因此同一个颜色就在同一颗splay里了,且一个点到根的权值val[i]也就是到根路径上虚边的个数,然后看access时会对哪些点的val[i]产生影响. 以下的原儿子表示原来与x在同一颗splay中的儿子 (注意不是splay中x的儿子,是原树中x的儿子,即splay中x的后继). 当x断开与它原儿子所在splay的连接时,原儿子的子树val都要+1,接上的新儿子的splay,新儿子所在子树val要-1. 对于2操作,…
题目分析: 操作一很明显等价于LCT上的access操作,操作二是常识,操作三转化到dfs序上求最大值也是常识.access的时候顺便在线段树中把对应部分-1,把右子树的子树+1即可. 代码: #include<bits/stdc++.h> using namespace std; ; int num,n,m; vector <int> g[maxn]; int f[maxn],dep[maxn],dfsin[maxn],dfsout[maxn]; class SegmentTre…
 [题解]: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ; ];int tot,head[N],cur[N]; ]; inline int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return x*f; } void add(int x,int y){ e[++tot]…
[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…
codevs 1191 树轴染色 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1191/ Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. Input 输入一行为N和M.下面M行每行两个数Li.Ri Output 输出M行,为每次操作后剩余黑色点的个数.…
[LG3703][SDOI2017]树点涂色 题面 洛谷 题解 更博辣,更博辣!!! 猪年的第一篇博客 一次只能染根到\(x\),且染的颜色未出现过 这句话是我们解题的关键. 设\(x\)到根的颜色数为\(f(x)\),则\(u\)到\(v\)的颜色数:\(f(u)+f(v)-f(lca_{u,v})+1\) 想一想,为什么? 很显然,如果没有\(1\)操作,我们直接树剖维护一下就可以了. 但是现在有了\(1\)操作... 这个\(1\)操作,其实是拉一条从\(x\)到根的链,染成一种颜色 这是…
题目大意:有n个人,给你他们的关系(老板和员工),没有直属上司的人就是整个公司的领导者,这意味着n个人形成一棵树(多叉树).当一个人被分配工作时他会让他的下属也做同样的工作(并且立即停止手头正在做的工作),题目会询问你其中某个人正在做的工作. 解题思路:其实从“一个人分配他的下属做一样的工作”这里就可以看出来了,这相当于让一块区间的人都做一样的事,就是线段树区间染色问题.但不能使用线段树,要先将多叉树铺展开,将节点映射到线段上.把每个人的管理区段找出来(把属于同一个人管的放一起,上司放在前面),…