题目链接

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. python3之协程

    1.协程的概念 协程,又称微线程,纤程.英文名Coroutine. 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度.在一个线程中会有很多函数,我们把这些函数称为子程序, ...

  2. Linux内存管理1---内存寻址

    1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...

  3. Mac环境变量配置错了以后初始化的方法

    转自:https://blog.csdn.net/or_7r_ccl/article/details/50886223 配置过安卓开发环境,改过bash_profile这个文件,最后不知怎么的只有cd ...

  4. eclipse设置代码模板和格式

    该设置可以在保存文件时自动根据模板调整代码格式. 首先准备华为代码格式化文件: FEFO-Formatter.xml FEFO-codetemplates.xml 设置格式Preferences-Ja ...

  5. openwrt 中route配置

    route配置项默认保存在文件 /etc/config/network 中. 配置route的接口“interface” 使用的协议需要为dhcp才可. config interface 'wan' ...

  6. log4j2配置文件log4j2.xml

    原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...

  7. PYTHON-迭代器,xxx生成式

    一 迭代器1 什么是迭代器 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...

  8. 石头剪刀布三局两胜(平局重来break用法)

  9. Ant+Jmeter自动化接口测试的部署 及 部署过程中的坑

    一.环境准备: 1.Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html    配置环境变量-系统变 ...

  10. Webpack devServer中的 proxy 实现跨域

    Webpack dev server使用http-proxy解决跨域问题 文档资料 webpack关于webpack-dev-server开启proxy的官方介绍Vue-cli proxyTable ...