hdu3974 Assign the task线段树 dfs序
1 #include <bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+90;
4 const int inf=1e9+90;
5 #define eps 1e-10
6 #define forn(i,n) for(int i=0;i<n;i++)
7 #define form(i,n) for(int i=1;i<=n;i++)
8 typedef long long ll ;
9 typedef unsigned long long ull ;
10 #define ls l,mid,p<<1
11 #define rs mid+1,r,p<<1|1
12 int a[N];
13 int n,m,root,rt;
14 int to[N],ver[N],h[N],tot;
15 char c[2];
16 void add(int x,int y){
17 to[++tot]=h[x];
18 ver[tot]=y;
19 h[x]=tot;
20 }
21 struct Node{
22 int l,r;
23 ll sum;
24 }t[N<<2];
25 int ml[N],mr[N];
26 void dfs(int x){
27 //进来的时候+1,
28 ml[x]=++rt;
29 for(int i=h[x];~i;i=to[i]){
30 dfs(ver[i]);
31 }
32 mr[x]=rt;//返回的时候不需要+1
33 }
34 void pd(int p){
35 if(t[p].sum!=-1){
36 t[p<<1].sum=t[p<<1|1].sum=t[p].sum;
37 t[p].sum=-1;
38 }
39 }
40 void build(int l,int r,int p){
41 if(l==r){
42 t[p].l=t[p].r=l;
43 t[p].sum=-1;
44 return;
45 }
46 t[p]={l,r,-1};
47 int mid=l+r>>1;
48 build(l,mid,p<<1);
49 build(mid+1,r,p<<1|1);
50 }
51 void modify(int l,int r,int c,int p){
52 if(l<=t[p].l&&t[p].r<=r){
53 t[p].sum=c;
54 return;
55 }
56 pd(p);
57 int mid=t[p].l+t[p].r>>1;
58 if(l<=mid)modify(l,r,c,p<<1);
59 if(r>mid)modify(l,r,c,p<<1|1);
60 }
61 int query(int x,int p){
62 if(t[p].l==t[p].r)return t[p].sum;
63 pd(p);
64 int mid=t[p].l+t[p].r>>1;
65 int ans=-1;
66 if(x<=mid)ans=query(x,p<<1);
67 else ans=query(x,p<<1|1);
68 return ans;
69 }
70 int main(){
71 // freopen("in.txt","r",stdin);
72 // freopen("out.txt","w",stdout);
73 int T,x,y;
74 cin>>T;
75 form(k,T){
76 printf("Case #%d:\n",k);
77 scanf("%d",&n);
78 memset(a,0,sizeof(a));
79 memset(h,-1,sizeof(h));
80 tot=0,rt=0;
81 forn(i,n-1) {
82 scanf("%d%d", &x, &y);
83 add(y,x);
84 a[x] = 1;
85 }
86 form(i,n){
87 if(!a[i]){
88 root=i;
89 break;
90 }
91 }
92 scanf("%d",&m);
93 dfs(root);
94 build(1,n,1);
95 forn(i,m){
96 scanf("%s",c);
97 if(c[0]=='C'){
98 scanf("%d",&x);
99 printf("%d\n",query(ml[x],1));
100 }else{
101 scanf("%d%d",&x,&y);
102 modify(ml[x],mr[x],y,1);
103 }
104 }
105 }
106 }
hdu3974 Assign the task线段树 dfs序的更多相关文章
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s 内存限制:512.0MB 总提交次数:196 AC次数:65 平均分: ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...
- 【bzoj4817】树点涂色 LCT+线段树+dfs序
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- S - Query on a tree HDU - 3804 线段树+dfs序
S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...
- HDU 5692 线段树+dfs序
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- Assign the task HDU - 3974 (dfs序 + 线段树)
有一家公司有N个员工(从1到N),公司里每个员工都有一个直接的老板(除了整个公司的领导).如果你是某人的直接老板,那个人就是你的下属,他的所有下属也都是你的下属.如果你是没有人的老板,那么你就没有下属 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3306】树 线段树 + DFS序
3306: 树 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 792 Solved: 262[Submit][Status][Discuss] De ...
随机推荐
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 01 C语言基本介绍
C语言特点 容易上手学习 结构化语言 执行效率高 处理的工作和活动偏底层 可以在多种计算机平台上编译(类似Java的跨平台) C语言历史 目前,C 语言是最广泛使用的系统程序设计语言之一 C 语言是最 ...
- Bayer Pattern——RGGB
原博客地址:https://blog.csdn.net/joe9280/article/details/46952947 参考:https://blog.csdn.net/wgx571859177/a ...
- Java 获取屏幕的宽度和高度
获取屏幕的宽度和高度 1 import java.awt.Dimension; 2 import java.awt.Toolkit; 3 4 public class Main { 5 6 publi ...
- 微服务通信之feign集成负载均衡
前言 书接上文,feign接口是如何注册到容器想必已然清楚,现在我们着重关心一个问题,feign调用服务的时候是如何抉择的?上一篇主要是从读源码的角度入手,后续将会逐步从软件构架方面进行剖析. 一.R ...
- 手把手教你使用 Prometheus 监控 JVM
概述 当你的 Java 业务容器化上 K8S 后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控 ...
- 架构师根本不会被语言限制住,php照样可以用领域驱动设计DDD四层架构!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你在通往架构师的路上吗? 程序员这个行业就像是在不断的打怪升级,突破每一阶段的瓶颈期 ...
- 警惕char类型直接相加
今天在写某个程序需要对两个数字字符串进行相加操作,比如字符串1:12345,字符串2:23456.需要1和2相加.2和3相加.就是两个字符相同位置的数进行相加. 这个一看很好完成,写一个for,然后取 ...
- vscode设置snippets
自动添加文件描述信息 "File Comments": { "prefix": "filecomments", "body&quo ...
- C++里面类和对象是什么意思?
本文章向大家介绍C++类和对象到底是什么意思?,主要包括C++类和对象到底是什么意思?使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. C++ 是一门 ...