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

 #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. java 开发社区蔬菜、食品交易平台系统 源码

    开发环境:    Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php? ...

  2. 软链接和硬链接——Linux中的文件共享

    硬链接(Hard Link)和软链接也称为符号链接(Symbolic Link)的目的是为了解决文件的共享使用问题.要阐明其原理,必须先理解Linux的文件存储方式. 索引结点 Linux是一个UNI ...

  3. 试题 基础练习 Huffuman树

    试题 基础练习 Huffuman树 试题 基础练习 Huffuman树 ​ 翻了翻网上,基本都是暴力排序.我就提供一个最小堆的写法吧! ​ 点击这里,跳转查看最小堆插入删除函数的简单写法 Talk i ...

  4. python——面向对象(3),搬家具

    """date: 2020.2.9搬家具:将小于房子剩余面积的家具搬进房子1.定义家具类,房屋类""" class Furniture(): ...

  5. c# 异步编程总结

    异步编程前提 1.学委托 delegate 其中委托中的beginInvoke()和endInvoke()方法必须要会. 2.学习回调函数 (也可以不用,但是一般建议用回调函数中执行endinvoke ...

  6. 浅谈 vue-loader---合格前端

    什么是 vue-loader? vue-loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件的格式撰写 Vue 组件. 如何使用? 1. 安装 npm install  ...

  7. Android中通过Fragment进行简单的页面切换

    首先是activity中的布局 <?xml version="1.0" encoding="utf-8"?> <androidx.constr ...

  8. 洛谷P1331-搜索基础-什么是矩形?(我的方案)

    原题链接:https://www.luogu.com.cn/problem/P1331 简单来说就是给出一个由‘#’和‘.‘组成的矩阵.需要识别存在几个矩形(被完全填充的).如果有矩形相互衔接则认为出 ...

  9. 优酷爱奇艺视频转换为MP4格式工具

    本君今天分享两个免费的视频格式转换工具,分别是爱奇艺和优酷的(腾讯的有点复杂,等整理完再分享).教程都是一步步亲手操作的,每一步都有配图.希望各位老板多转发分享,谢谢! 一爱奇艺QSV转MP4格式 解 ...

  10. LeetCode 145. 二叉树的后序遍历 (用栈实现后序遍历二叉树的非递归算法)

    题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [ ...