按深度染色,奇深度的点存反权值。

 #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, 线段树, 黑白染色思想的更多相关文章

  1. codeforces 383C Propagating tree 线段树

    http://codeforces.com/problemset/problem/383/C 题目就是说,  给一棵树,将一个节点的值+val, 那么它的子节点都会-val, 子节点的子节点+val. ...

  2. Codeforces 383C . Propagating tree【树阵,dfs】

    标题效果: 有一棵树,有两种操作模式对本树:1:表示为(1 x val),在NOx加在节点上val,然后x每个节点加上儿子- val.给每个儿子一个儿子在一起-(- val),加到没有儿子为止.2:表 ...

  3. CodeForces 384E Propagating tree (线段树+dfs)

    题意:题意很简单么,给定n个点,m个询问的无向树(1为根),每个点的权值,有两种操作, 第一种:1 x v,表示把 x 结点加上v,然后把 x 的的子结点加上 -v,再把 x 的子结点的子结点加上 - ...

  4. CodeForces 383C Propagating tree

    Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...

  5. HDU3974 Assign the task(多叉树转换为线段+线段树区间染色)

    题目大意:有n个人,给你他们的关系(老板和员工),没有直属上司的人就是整个公司的领导者,这意味着n个人形成一棵树(多叉树).当一个人被分配工作时他会让他的下属也做同样的工作(并且立即停止手头正在做的工 ...

  6. hdu 5023(线段树区间染色,统计区间内颜色个数)

    题目描述:区间染色问题,统计给定区间内有多少种颜色? 线段树模板的核心是对标记的处理 可以记下沿途经过的标记,到达目的节点之后一块算,也可以更新的时候直接更新到每一个节点 Lazy操作减少修改的次数( ...

  7. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  8. [Codeforces 1199D]Welfare State(线段树)

    [Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...

  9. [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)

    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...

随机推荐

  1. 11种常用css样式之background学习

    background如何简写?如何在背景图像不变的情况下,依旧实现页面文字滚动,为之奈何?别担心,快用background-attachment: fixed;/*固定定位*/常用的backgroun ...

  2. Android Gradle报错 (Error:No such property: GradleVersion for class: JetGradlePlugin) 的原因与解决

    Error:No such property: GradleVersion for class: JetGradlePlugin 错误原因:IDE 版本(GradlePlugin)和 Gradle 版 ...

  3. RequestFacade对象获取请求头时忽略大小写

    也许在Controller层 在RequestFacde文件中getHeader函数逻辑实现如下所示: public String getHeader(String name) { if(this.r ...

  4. nginx配置访问https[自签版]

    通过openssl生成证书 (1)设置server.key,这里需要设置两遍密码: openssl genrsa -des3 -out server.key 1024 (2)参数设置,首先这里需要输入 ...

  5. 今日确定开源近两年来的EA程序

    从2018年开始研究mt4的mql,在2019年主要设计了NinjaLoveFishEA这款网格程序,稳定运行了1年多,今年的伊朗被袭击,造成金价大幅上涨,-18%止损我离场后,决定不再继续研究了. ...

  6. scanf 与fgets

    scanf: 1.以输入字符串也可以输入数字 . 2.遇到空格就停止.3.会有segmentation fault. fgets: 1.只能输入字符串.2.回车才会停止.3.不会有segmenntat ...

  7. SQL server 游标用法

    declare @EmpCode varchar(50), @EmpName varchar(50), @EmpAddress varchar(200);declare curEmployee cur ...

  8. 剑指offer-面试题53_2-0~n-1中缺失的数字-二分查找

    /* 题目: 寻找递增数组0~n-1中缺失的数字. */ /* 思路: 变形二分法. */ #include<iostream> #include<cstring> #incl ...

  9. PTA 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...

  10. Uva1639(概率期望/对数处理避免丢失精度)

    Uva1639 题意: 有两个盒子各有n个糖果(n<=200000),每天随机选择一个:选第一个盒子的概率是p(0 ≤ p ≤ 1),第二个盒子的概率为1-p,然后吃掉其中的一颗.直到有一天,随 ...