题目链接

loj#2054. 「TJOI / HEOI2016」树

题解

每次标记覆盖整棵字数,子树维护对于标记深度取max

dfs序+线段树维护一下

代码

#include<cstdio>
#include<algorithm> inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
int n,m;
const int maxn = 200007;
struct node {
int v,next;
} edge[maxn << 1];
int head[maxn],num = 0;
inline void add_edge(int u,int v) {
edge[++ num].v = v; edge[num].next = head[u];head[u] = num;
edge[++ num].v = u; edge[num].next = head[v];head[v] = num;
} int dfn[maxn],low[maxn],dep[maxn];
struct seg {
#define ls x << 1,l,mid
#define rs x << 1 | 1,mid + 1,r
int t[maxn << 1];
void build(int x,int l,int r) {
if(l == r) { t[x] = 1; return; }
int mid = l + r >> 1;
build(ls);
build(rs);
}
inline void cover(int x,int k) {
if(!t[x]) t[x] = k;
else t[x] = dep[t[x]] < dep[k] ? k : t[x];
}
inline void pushdown(int x) {
cover(x << 1,t[x]);
cover(x << 1 | 1,t[x]);
t[x] = 0;
}
int query(int x,int l,int r,int k) {
if(l == r) return t[x];
if(t[x]) pushdown(x);
int mid = l + r >> 1;
if(k <= mid) return query(ls,k);
else return query(rs,k);
}
void modify(int x,int l,int r,int L,int R,int k) {
if(L <= l && R >= r) {
cover(x,k); return ;
}
if(t[x]) pushdown(x);
int mid = l + r >> 1;
if(L <= mid) modify(ls,L,R,k);
if(R > mid ) modify(rs,L,R,k);
}
}t; int idx = 0;
void dfs(int x,int fa = 0) {
dfn[x] =++ idx;
dep[x] = dep[fa] + 1;
for(int i = head[x];i;i = edge[i].next)
if(edge[i].v != fa) dfs(edge[i].v,x);
low[x] = idx;
}
int main() {
n = read(); m = read();
int cnt = 1;
for(int i = 1;i < n;++ i) {
add_edge(read(),read());
}
dfs(1);
t.build(1,1,n);
char ty[3];
for(int x,i = 1;i <= m;i += 1) {
scanf("%s",ty + 1);
if(ty[1] == 'Q') {
printf("%d\n",t.query(1,1,n,dfn[read()]));
} else {
x = read();
t.modify(1,1,n,dfn[x],low[x],x);
}
}
return 0;
}

loj#2054. 「TJOI / HEOI2016」树的更多相关文章

  1. AC日记——#2054. 「TJOI / HEOI2016」树

    #2054. 「TJOI / HEOI2016」树 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include < ...

  2. 【LOJ】#2054. 「TJOI / HEOI2016」树

    题解 一写过一交A的水题 只要求一个dfs序,新加一个标记在子树所在的区间上覆盖上该点,维护深度最大的答案 代码 #include <bits/stdc++.h> #define ente ...

  3. loj #2055. 「TJOI / HEOI2016」排序

    #2055. 「TJOI / HEOI2016」排序   题目描述 在 2016 年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个 ...

  4. loj#2059. 「TJOI / HEOI2016」字符串 sam+线段树合并+倍增

    题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在paren ...

  5. LOJ #2058「TJOI / HEOI2016」求和

    不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Sol ...

  6. AC日记——#2057. 「TJOI / HEOI2016」游戏 LOJ

    #2057. 「TJOI / HEOI2016」游戏 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include &l ...

  7. 「TJOI / HEOI2016」字符串

    「TJOI / HEOI2016」字符串 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 \(n\) 的字符串 \(s\),和 ...

  8. loj2058 「TJOI / HEOI2016」求和 NTT

    loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...

  9. 【LOJ】#2059. 「TJOI / HEOI2016」字符串

    题解 我们冷静一下,先画一棵后缀树 然后发现我们要给c和d这一段区间在[a,b]这一段开头的串里找lcp 而lcp呢,就是c点的祖先的到根的一段,假如这个祖先的子树里有[a,b - dis[u] + ...

随机推荐

  1. 使用Groovy的sql模块操作mysql进行多种查询

    连接数据库,这里要创建一个sql实例来操作数据库,必须加载jdbc驱动包,使用两个注解,否则会报错: import groovy.sql.Sql url='jdbc:mysql://localhost ...

  2. 对numpy中shape的理解

    from:http://blog.csdn.net/by_study/article/details/67633593 环境:Windows, Python3.5 一维情况: >>> ...

  3. ReLu、LeakyRelu、PReLu(转载)

    转载链接:http://blog.csdn.net/cham_3/article/details/56049205

  4. 腾讯云YUM安装失效

    修改路由后,YUM安装失效,提示不能解析YUM源 yum clear chche yum makecache

  5. Python3学习笔记08-tuple

    元组与列表类似,不同之处在于元组的元素不能修改 元组使用小括号,列表使用方括号 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 tup1 = ('Google', 'Runoob', 19 ...

  6. shiro设置session超时时间

    系统默认超时时间是180000毫秒(30分钟) long timeout = SecurityUtils.getSubject().getSession().getTimeout(); System. ...

  7. select 不要 用*

    背景 说实在的,这有什么好记录的呢.记录这个有啥用,真是技术人员的吹毛求疵.说起来,就是给人装有用吧.既然记录了,也想个相关的段子吧.曾经有个同事写了个sql,效率极差,来了个女同事,竟然解决了,问题 ...

  8. 超级wifi

    超级wifi (super wi-fi)是相对于现有的wifi提出的改进版,执行响应的 802.11af标准. 802.11af 标准是2014年2月提出的,它的主要特点是"建议在电视频率之 ...

  9. 判断Javascript变量是否为空 undefined 或者null(附样例)

    1.变量申明未赋值 var type; //type 变量未赋值 1. type==undefined //true 2. type===undefined //true 3. typeof(type ...

  10. oracle中游标详细用法

    转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...