[LOJ144] DFS 序 1 - DFS序 线段树
为熟悉机房键盘而划水
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4000005;
int R;
namespace seg {
int a[N], src[N];
void pushup(int p) { a[p] = a[p * 2] + a[p * 2 + 1]; }
void build(int p, int l, int r) {
if (l == r) {
a[p] = src[l];
} else {
build(p * 2, l, (l + r) / 2);
build(p * 2 + 1, (l + r) / 2 + 1, r);
pushup(p);
}
}
void modify(int p, int l, int r, int pos, int val) {
if (l == r) {
a[p] += val;
} else {
if (pos <= (l + r) / 2) {
modify(p * 2, l, (l + r) / 2, pos, val);
} else {
modify(p * 2 + 1, (l + r) / 2 + 1, r, pos, val);
}
pushup(p);
}
}
int query(int p, int l, int r, int ql, int qr) {
if (l > qr || r < ql)
return 0;
if (l >= ql && r <= qr)
return a[p];
else {
return query(p * 2, l, (l + r) / 2, ql, qr) + query(p * 2 + 1, (l + r) / 2 + 1, r, ql, qr);
}
}
} // namespace seg
namespace tree {
int dfn[N], fin[N], ind;
vector<int> g[N];
void dfs(int p) {
dfn[p] = ++ind;
for (int i = 0; i < g[p].size(); i++) {
if (dfn[g[p][i]] == 0) {
dfs(g[p][i]);
}
}
fin[p] = ind;
}
void presolve() {
ind = 0;
dfs(R);
}
} // namespace tree
int n, m, t1, t2, t3, t4, val[N];
signed main() {
ios::sync_with_stdio(false);
cin >> n >> m >> R;
for (int i = 1; i <= n; i++) {
cin >> val[i];
}
for (int i = 1; i < n; i++) {
cin >> t1 >> t2;
tree::g[t1].push_back(t2);
tree::g[t2].push_back(t1);
}
tree::presolve();
for (int i = 1; i <= n; i++) {
seg::src[tree::dfn[i]] = val[i];
}
seg::build(1, 1, n);
for (int i = 1; i <= m; i++) {
cin >> t1 >> t2;
if (t1 == 1) {
cin >> t3;
seg::modify(1, 1, n, tree::dfn[t2], t3);
} else {
cout << seg::query(1, 1, n, tree::dfn[t2], tree::fin[t2]) << endl;
}
}
}
[LOJ144] DFS 序 1 - DFS序 线段树的更多相关文章
- HDU - 4366 Successor DFS序 + 分块暴力 or 线段树维护
给定一颗树,每个节点都有忠诚和能力两个参数,随意指定一个节点,要求在它的子树中找一个节点代替它,这个节点要满足能力值大于它,而且是忠诚度最高的那个. 首先,dfs一下,处理出L[i], R[i]表示d ...
- cdoj844-程序设计竞赛 (线段树的区间最大连续和)【线段树】
http://acm.uestc.edu.cn/#/problem/show/844 程序设计竞赛 Time Limit: 3000/1000MS (Java/Others) Memory L ...
- cdoj 574 High-level ancients dfs序+线段树
High-level ancients Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/s ...
- G. Yash And Trees 线段树 + dfs序 + bitset
这个是要用bitset 一个大整数的二进制 学习推荐博客 这个题目大意就是:给你n,m 还有一个序列,还有一个一棵树,有一种操作一种询问 操作是给你一个节点 把这个节点及其子节点都加上x 询问是 给你 ...
- hdu 5692 Snacks 线段树+dfs
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- [jzoj 5662] 尺树寸泓 解题报告 (线段树+中序遍历)
interlinkage: https://jzoj.net/senior/#contest/show/2703/1 description: solution: 发现$dfs$序不好维护 注意到这是 ...
- [ZJOI2019]语言[树链的并、线段树合并]
题意 题目链接 分析 考虑枚举每个点的答案,最后除以 2 即可. 可以与 \(u\) 构成合法点对 的集合 为所有经过了 \(u\) 的链的并.因为这些链两两有交,根据结论 "树上两条相交的 ...
- 【BZOJ 3443】 3443: 装备合成 (离线+线段树)
3443: 装备合成 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 63 Solved: 31 Description [背景] lll69 ...
- 51nod1199:Money out of Thin Air(线段树)
按dfs序一个一个加入线段树,可以让任何一颗子树的节点在线段树中连续,于是就可以用线段树维护整棵树了 和树剖的思想是一样的,大概一眼就看出来了,但是写了两个半天(躺 总结:记住以后写完数据结构或者数字 ...
- [SDOI2017][bzoj4817] 树点涂色 [LCT+线段树]
题面 传送门 思路 $LCT$ 我们发现,这个1操作,好像非常像$LCT$里面的$Access$啊~ 那么我们尝试把$Access$操作魔改成本题中的涂色 我们令$LCT$中的每一个$splay$链代 ...
随机推荐
- ROS之usb_cam
source devel/setup.*sh roslaunch usb_cam usb_cam-test.launch rqt_graph查看动态消息图 当我们把鼠标放在/usb_cam/image ...
- 剑指offer-面试题53_1-在排序数组中查找数字-二分查找
/* 题目: 统计一个数字在排序数组中出现的次数. */ /* 思路: 1.从前往后遍历,时间复杂度O(n). 2.二分查找到目标数字target,向前向后遍历,时间复杂度O(n). 3.利用二分法, ...
- Pikachu-敏感信息泄露
敏感信息泄露概述 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信 ...
- Python 3.8 已发布,现在是切换至新版本的好时机吗?
Python 3.8 已于前两周正式发布,不过目前大多数开发者主要使用的仍是 Python 3.7.x 或更旧的版本. ! 事实上,立刻切换到使用 Python 3.8 可能会引发一些问题.想知道何时 ...
- 使用SFTP连接Centos
1.centos已经配置好了SFTP,直接使用root用户连接就可以,模式选SFTP即可. 2.虽然端口号没有填写,默认端口号是22 3.可能还是会遇到无法访问的问题,可以进行iptables防火墙的 ...
- LINUX 概述
初识linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协 ...
- Centos 安装SVN
Centos 安装SVN centos(我这里使用的是CentOS7)下yum命令即可方便的完成安装 $ sudo yum install subversion 测试安装是否成功: $ svnser ...
- H5-安卓和ios调用相机和相册
<input v-if="ipshow" type="file" accept="image/*" name="file1& ...
- 500kuai
https://www.bilibili.com/bangumi/media/md11653495/?spm_id_from=666.10.b_62616e67756d695f64657461696c ...
- 自定义Redux
实现mini版redux 1. 理解redux模块 1). redux模块整体是一个对象模块 2). 内部包含几个函数 createStore(reducers) // reducers: funct ...