bzoj 4551: [Tjoi2016&Heoi2016]树 (线段树)
来源:互联网 发布:ubuntu 当前目录大小 编辑:程序博客网 时间:2024/09/21 09:18
题目描述
传送门
题解
感觉这道题写法其实应该挺多的,我写的线段树的区间修改单点查询,然后用的标记永久化。。
代码
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define N 200003using namespace std;int tot,point[N],nxt[N],v[N],l[N],r[N];int tr[N*4],delta[N*4],deep[N],n,m,sz;int add(int x,int y){ tot++; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; tot++; nxt[tot]=point[y]; point[y]=tot; v[tot]=x;}void dfs(int x,int fa){ deep[x]=deep[fa]+1; l[x]=++sz; for (int i=point[x];i;i=nxt[i]) { if (v[i]==fa) continue; dfs(v[i],x); } r[x]=sz;}void build(int now,int l,int r){ if (l==r) { tr[now]=1; delta[now]=1; return; } int mid=(l+r)/2; build(now<<1,l,mid); build(now<<1|1,mid+1,r);}void query(int now,int l,int r,int ll,int rr,int x){ if (ll<=l&&r<=rr) { if(deep[delta[now]]<deep[x]) delta[now]=x; return; } int mid=(l+r)/2; if (ll<=mid) query(now<<1,l,mid,ll,rr,x); if (rr>mid) query(now<<1|1,mid+1,r,ll,rr,x);}int find(int now,int l,int r,int x){ if (l==r) return delta[now]; int mid=(l+r)/2; int ans=delta[now]; int t=0; if (x<=mid) t=find(now<<1,l,mid,x); else t=find(now<<1|1,mid+1,r,x); if (deep[ans]>deep[t]) return ans; else return t;}int main(){ freopen("a.in","r",stdin); scanf("%d%d",&n,&m); for (int i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); add(x,y); } dfs(1,0); build(1,1,n); for (int i=1;i<=m;i++) { char s[5]; int x; scanf("%s%d",s+1,&x); if (s[1]=='C') query(1,1,n,l[x],r[x],x); else printf("%d\n",find(1,1,n,l[x])); }}
0 0
- bzoj 4551: [Tjoi2016&Heoi2016]树 (线段树)
- bzoj-4551 [Tjoi2016&Heoi2016]树
- BZOJ 4551: [Tjoi2016&Heoi2016]树
- BZOJ 4551 [Tjoi2016&Heoi2016]树
- BZOJ 4551: [Tjoi2016&Heoi2016]树
- BZOJ 4551 [Tjoi2016&Heoi2016]树 树链剖分
- bzoj 4552: [Tjoi2016&Heoi2016]排序 二分答案+线段树
- BZOJ 4553 [Tjoi2016&Heoi2016]序列 线段树套treap
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树+二分
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 二分 线段树
- 【BZOJ】4552 [Tjoi2016&Heoi2016]排序 二分+线段树
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 [二分][线段树]
- 4551: [Tjoi2016&Heoi2016]树
- 4551: [Tjoi2016&Heoi2016]树
- [达成成就:Tjoi2016&Heoi2016全AC] bzoj 4556: [Tjoi2016&Heoi2016]字符串 后缀数组+可持久化线段树
- [并查集 树] BZOJ 4551 [Tjoi2016&Heoi2016]树
- 【NOIP2016模拟7.11】树 [bzoj] 4551: [Tjoi2016&Heoi2016]树
- bzoj 4551: [Tjoi2016&Heoi2016]树 并查集
- STM32F103移植51超声波测距
- SoC嵌入式软件架构设计之一:系统内存需求评估
- Java面向对象第二章 继承
- Task Scheduling(0071)
- linux include 头文件路径
- bzoj 4551: [Tjoi2016&Heoi2016]树 (线段树)
- Semi-Supervised Learning with Generative Adversarial Networks
- Hadoop2.6.2完全分布式集群HA模式安装配置详解
- 推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)
- 国际会议论文引用
- boolan——c++学习笔记之设计模式二
- SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理
- 1001
- spring MVC框架的配置流程(代码详解)