Codeforces 383C Propagating tree, 线段树, 黑白染色思想
按深度染色,奇深度的点存反权值。
#include <bits/stdc++.h>
using namespace std; vector <int> g[];
int t1,t2,t3,seq[],a[],s[],vis[],ind,n,m,src[],frm[],dep[]; void dfs(int p) {
vis[p]=;
frm[p]=ind+;
for(int i=;i<g[p].size();i++)
if(vis[g[p][i]]==)
dep[g[p][i]]=dep[p]+,
dfs(g[p][i]);
seq[p]=++ind;
} void build(int p,int l,int r){
if(l==r) a[p]=s[l];
else build(p*,l,(l+r)/),build(p*+,(l+r)/+,r);
} void modify(int p,int l,int r,int ql,int qr,int k){
if(l>qr||r<ql) return;
if(l>=ql&&r<=qr) {a[p]+=k; return;}
a[p*]+=a[p], a[p*+]+=a[p], a[p]=;
modify(p*,l,(l+r)/,ql,qr,k);
modify(p*+,(l+r)/+,r,ql,qr,k);
} int query(int p,int l,int r,int pos){
if(l==r) return a[p];
a[p*]+=a[p], a[p*+]+=a[p], a[p]=;
if(pos<=(l+r)/) return query(p*,l,(l+r)/,pos);
else return query(p*+,(l+r)/+,r,pos);
} int main(){
ios::sync_with_stdio(false);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&src[i]);
for(int i=;i<n;i++) scanf("%d%d",&t1,&t2), g[t1].push_back(t2), g[t2].push_back(t1);
dep[]=; dfs();
for(int i=;i<=n;i++) dep[i]=-+*(dep[i]%);
for(int i=;i<=n;i++) s[seq[i]]=dep[i]*src[i];
build(,,n);
for(int i=;i<=m;i++) {
scanf("%d%d",&t1,&t2);
if(t1==){
scanf("%d",&t3);
modify(,,n,frm[t2],seq[t2],dep[t2]*t3);
}
else{
printf("%d\n",dep[t2]*query(,,n,seq[t2]));
}
}
return ;
}
Codeforces 383C Propagating tree, 线段树, 黑白染色思想的更多相关文章
- codeforces 383C Propagating tree 线段树
http://codeforces.com/problemset/problem/383/C 题目就是说, 给一棵树,将一个节点的值+val, 那么它的子节点都会-val, 子节点的子节点+val. ...
- Codeforces 383C . Propagating tree【树阵,dfs】
标题效果: 有一棵树,有两种操作模式对本树:1:表示为(1 x val),在NOx加在节点上val,然后x每个节点加上儿子- val.给每个儿子一个儿子在一起-(- val),加到没有儿子为止.2:表 ...
- CodeForces 384E Propagating tree (线段树+dfs)
题意:题意很简单么,给定n个点,m个询问的无向树(1为根),每个点的权值,有两种操作, 第一种:1 x v,表示把 x 结点加上v,然后把 x 的的子结点加上 -v,再把 x 的子结点的子结点加上 - ...
- CodeForces 383C Propagating tree
Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...
- HDU3974 Assign the task(多叉树转换为线段+线段树区间染色)
题目大意:有n个人,给你他们的关系(老板和员工),没有直属上司的人就是整个公司的领导者,这意味着n个人形成一棵树(多叉树).当一个人被分配工作时他会让他的下属也做同样的工作(并且立即停止手头正在做的工 ...
- hdu 5023(线段树区间染色,统计区间内颜色个数)
题目描述:区间染色问题,统计给定区间内有多少种颜色? 线段树模板的核心是对标记的处理 可以记下沿途经过的标记,到达目的节点之后一块算,也可以更新的时候直接更新到每一个节点 Lazy操作减少修改的次数( ...
- [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)
[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...
- [Codeforces 1199D]Welfare State(线段树)
[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...
- [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)
[Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...
随机推荐
- C#个推SDK推送安卓+iOS
下载个推SDK,找到这两个dll直接引用. using引用 using com.gexin.rp.sdk.dto; using com.igetui.api.openservice; using co ...
- Girlfreind:1 Vulnhub Walkthrough
靶机链接: https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 主机扫描: HTTP 目录访问,提示无权限,右键源码,提示XXF即可 正 ...
- Maven项目的目录问题
创建maven项目,使不使用骨架都行. java项目的目录 src/main 项目 java存放.java文件,resources存放静态资源.配置文件.映射文件. 静态资源一般在resources ...
- linux中网络命令
write 解释 命令名称:write 命令所在路径:/usr/bin/write 执行权限:所有用户 功能描述:给用户发信息,以Ctrl+D保存结束 语法 write <用户名> 示例 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(7)
目录 tee 命令的缺陷是什么?如何解决这个缺陷? /etc/ld.so.conf 文件的作用是什么? 动态链接和静态链接有什么不同? 动态编译 静态编译 共享库为什么会有版本?共享库的版本升级原理是 ...
- python数据类型(第一弹)
作为一门计算机编程语言,python与其它语言一样,设有若干种数据类型,准确掌握各种数据类型的常用方法是精通python的必要条件,也是熟练使用各数据类型.最大限度发挥它们功能的基本条件. pytho ...
- 常用 Jenkins 配置
General Use custom workspace Directory: {directory, d:\github\} Source Code Management Git plugin Gi ...
- HDOJ1384 Intervals 题解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1384 大意:有 \(n\) 个区间 \([a_i,b_i]\),每个区间有个权值 \(c_i\),找到 ...
- Lucene使用IKAnalyzer分词
1.分析器 所有分析器最终继承的类都是Analyzer 1.1 默认标准分析器:StandardAnalyzer 在我们创建索引的时候,我们使用到了Index ...
- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)
课程目标掌握如何基于Spring Boot构建秒杀系统或者高并发业务系统,以及构建系统时采用的前后端技术栈适用人群Spring Boot实战者,微服务或分布式系统架构实战者,秒杀系统和高并发实战者,中 ...