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/) 题面 有 ...
随机推荐
- WPF 原生绑定和命令功能使用指南
WPF 原生绑定和命令功能使用指南 魏刘宏 2020 年 2 月 21 日 如今,当谈到 WPF 时,我们言必称 MVVM.框架(如 Prism)等,似乎已经忘了不用这些的话该怎么使用 WPF 了.当 ...
- Linux下使用Nginx
模拟tomcat集群 1.下载tomcat7,/usr/local下新建目录tomcat,将tomcat7剪切到/usr/local/tomcat wget http://mirror.bit.edu ...
- OpenLayers要素拖拽
//拖拽要素 function dragFeature (_map,_dragEndCallback) { let selFeature = null; _map.on("pointerdr ...
- [20200223]关于latch and mutext的优化.txt
[20200223]关于latch and mutext的优化.txt --//前一段时间一直在测试使用DBMS_SHARED_POOL.MARKHOT标识热对象以及sql语句的优化.--//有别人问 ...
- CentOS6 用yum安装mysql详解,简单实用
一.查看CentOS下是否已安装mysql 输入命令 :yum list installed | grep mysql 二.删除已安装mysql 输入命令: yum -y remove mysql 如 ...
- 微软帮助类SqlHelper
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- #《Essential C++》读书笔记# 第一章 C++ 编程基础
前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...
- 得心应用的Vue高级技巧---vue中文社区
1,require.context()一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...
- 9.16java总结
枚举 EnunTest.java 运行结果 falsefalsetrueSMALLMEDIUMLARGE 枚举类型可以直接用==来判断是否相等,即代表数据串,又有数的属性.是引用类型. 浮点数计算 ...
- 用ArcGIS Runtime for Android建立简单App,展示地图
1.新建AS项目 此处引用官网上新建项目的过程,很简单,不做翻译了. 2.配置ArcGIS Runtime for Android100.5.0环境 2-1.项目切换成Project 2-2 .选择P ...