牛客小白月赛12 H 华华和月月种树
题意:有三个操作
操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少)。
操作 2:表示华华上线做任务使节点 i 的子树中所有节点(即它和它的所有子孙节点)权值加 a 。
询问 3:华华需要给出 i 节点此时的权值。
解法:
把整棵树进行离线操作
先对这棵树进行dfs,一棵子树上的节点是连续的,加权值的时候直接把整颗子树加上权值即可,后面可以把新加上的点的权值清空。
当进行操作1的时候,把这个点的权值清零
当进行操作2的时候,把这个节点i的子树的所有结点权值加上a
当进行操作3的时候,查询这个结点i的权值
dfn[i]记录点i在树状数组上的位置,sz[i]是节点i的子树的大小
#include <bits/stdc++.h>
using namespace std;
const int M = 4e5 + ;
int cnt, tot, n;
struct Edge{
int next, to;
}edge[M * ];
struct node{
int opt, pos, x;
}a[M];
int dfn[M], sz[M], head[M], bit[M];
void add_egde(int u, int v) {
//printf("u %d v %d\n", u, v);
edge[++tot].next = head[u];
edge[tot].to = v;
head[u] = tot;
}
int dfs(int u, int fa) {
dfn[u] = ++cnt;
sz[u] = ;
for(int i = head[u]; i; i = edge[i].next) {
int v = edge[i].to;
if(v == fa) continue;
sz[u] += dfs(v, u);
}
return sz[u];
}
void update(int i, int x) {
while(i <= n + ) {
bit[i] += x;
i += i & (-i);
}
}
void add(int l, int r, int val) {
update(l, val);
update(r + , -val);
}
int query(int i) {
int ans = ;
while(i) {
ans += bit[i];
i -= i & (-i);
}
return ans;
}
int main(){
int m;
scanf("%d", &m);
for(int i = ; i <= m; i++) {
scanf("%d%d", &a[i].opt, &a[i].pos);
if(a[i].opt == ) add_egde(a[i].pos, ++n), a[i].pos = n;
if(a[i].opt == ) scanf("%d", &a[i].x);
}
dfs(, -);
for(int i = ; i <= m; i++) {
if(a[i].opt == ) {
int u = a[i].pos;
int val = query(dfn[u]);
add(dfn[u], dfn[u], -val);
}
else if(a[i].opt == ) {
int u = a[i].pos;
int val = a[i].x;
add(dfn[u], dfn[u] + sz[u] - , val);
}
else printf("%d\n", query(dfn[a[i].pos]));
}
return ;
}
牛客小白月赛12 H 华华和月月种树的更多相关文章
- 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)
链接:https://ac.nowcoder.com/acm/contest/392/H 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言2621 ...
- 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)
链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...
- 牛客小白月赛12 I 华华和月月逛公园 Tarjan算法求隔边
题目链接:https://ac.nowcoder.com/acm/contest/392/I 题意:给你一个连通的无向图,问图的隔边有多少条 输入:N,M分别是点数和边数 之后M行每行两个正整数u,v ...
- 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)
H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘
链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)
链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...
- 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...
- 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)
链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...
随机推荐
- Python学习之路:函数传递可变参数与不可变参数
函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2] def fun(a): print('传入函数时a的值为:', a ...
- SSM整合学习 四
事务管理 一:初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个 ...
- docker的容器和镜像的清理
Docker用户会在使用docker一段时间后发现宿主机的磁盘很容易就快被占满,并且手动docker rmi [imgName]似乎并不能释放磁盘,貌似想删掉的镜像依然在宿主机中,下面针对这一问题提出 ...
- Spring mvc请求处理流程详解(一)之视图解析
本文链接:https://blog.csdn.net/lchpersonal521/article/details/53112728 前言 Spring mvc框架相信很多人都很熟悉了,关于这方面 ...
- igel udc2 config
igel udc2 config 系统安装盘下载地址 http://www.myigel.biz/?forcedownload /config/bin/igelone_config #!/bin/sh ...
- 全网独发gensim中similarities.Similarity用法
index = similarities.MatrixSimilarity(lsi[corpus]) # 管网的原文翻译如下: 警告:similarities.MatrixSimilarity类仅仅适 ...
- MySQL路线
一 数据库简介与安装 二 库操作 三 表操作 四 数据操作 五 索引原理与慢查询优化 六 数据备份与慢查询优化 七 视图.触发器.事务.存储过程.函数
- 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 : 给定 ma ...
- node连接Mysql报错ER_NOT_SUPPORTED_AUTH_MODE
报错信息 本人系统安装的是mysql-installer-community-8.0.18.0.msi这个版本,然后我本地使用node-mysql去连接数据库. test.js文件 var mysql ...
- 140款Android开源优秀项目源码
BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beautifu ...