当前位置: 首页 > news >正文

C. Propagating tree

https://codeforces.com/contest/383/problem/C

因为是单点查询,操作一是+-+-

可以分奇偶性考虑

奇数 +-+-, -+-+

偶数  +-+,   -+-

我们可以发现奇数和偶数的标记是相反的

因此我们维护奇数点的标记,如果点是奇数就+val,否者就-val

查询的时候奇数点直接+a[u],偶数点相反再+a[u]

code

// Problem: C. Propagating tree
// Contest: Codeforces - Codeforces Round 225 (Div. 1)
// URL: https://codeforces.com/problemset/problem/383/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=2e5+9;
int a[N],fa[N],sz[N],wc[N],dep[N],dfn[N],rdfn[N],top[N];
int n,m,r,p,vistime;
vector<int> e[N<<1];
void add(int u,int v){e[u].push_back(v);e[v].push_back(u);
}
void dfs1(int u,int f){fa[u]=f;sz[u]=1;dep[u]=dep[f]+1;for(auto & i : e[u]){if(i!=f){dfs1(i,u);sz[u]+=sz[i];if(sz[i]>sz[wc[u]]){wc[u]=i;}}}
}
void dfs2(int u,int Top){dfn[u]=++vistime;rdfn[vistime]=u;top[u]=Top;if(wc[u]){dfs2(wc[u],Top);for(auto & i : e[u]){if(i!=wc[u] && i!=fa[u]){dfs2(i,i);}   }}
}
struct node{ll val,tag;
}seg[N<<2];
ll tl(ll x){return x<<1;
}
ll tr(ll x){return x<<1|1;
}
void pushup(int id){seg[id].val=(seg[tl(id)].val+seg[tr(id)].val);
}
bool inrange(int L,int R,int l,int r){return L>=l && R<=r;
}
bool outofrange(int L,int R,int l,int r){return  L>r || l>R;
}
void maketag(int id,int l,int r,ll v){(seg[id].val+=(r-l+1)*v);(seg[id].tag+=v);
}
void pushdown(int id,int l,int r){int mid=(l+r)>>1;maketag(tl(id),l,mid,seg[id].tag);  maketag(tr(id),mid+1,r,seg[id].tag);seg[id].tag=0;  
}
ll query(int id,int L,int R,int l,int r){if(inrange(L,R,l,r)){return seg[id].val;}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;pushdown(id,L,R);return (query(tl(id),L,mid,l,r)+query(tr(id),mid+1,R,l,r));}else{return 0;}
}
void modify(int id,int L,int R,int l,int r,ll v){if(inrange(L,R,l,r)){maketag(id,L,R,v);}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;pushdown(id,L,R);modify(tl(id),L,mid,l,r,v);modify(tr(id),mid+1,R,l,r,v);pushup(id);}
}
ll ask(int id,int l,int r,int pos){if(l==r){return seg[id].val;}int mid=(l+r)>>1;pushdown(id,l,r);if(mid>=pos){return ask(tl(id),l,mid,pos);}else{return ask(tr(id),mid+1,r,pos);}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n-1;i++){int u,v;cin>>u>>v;add(u,v);}//root=1dfs1(1,0);dfs2(1,0);for(int i=1;i<=m;i++){int op;cin>>op;if(op==1){int x,val;cin>>x>>val;val*=(dep[x]&1?1:-1);modify(1,1,n,dfn[x],dfn[x]+sz[x]-1,val);}else{int x;cin>>x;ll ans=ask(1,1,n,dfn[x]);ans*=(dep[x]&1?1:-1);ans+=a[x];cout<<ans<<'\n';}}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTML5 浏览器支持
  • XML CSS:结构和样式的完美结合
  • 秋招突击——8/16——字节广告业务——面经整理——二面挂
  • 【docker compose 部署和 go 热部署工具fresh】
  • git rebase和git merge的区别
  • EazyDraw for Mac 矢量图绘制设计软件
  • MySQL 学习笔记之事务操作
  • yd云手机登录算法分析
  • EXCEL 分段排序--Excel难题#86
  • 趣味算法------尾部零的个数(C语言,python双重解法)
  • 【微信小程序】使用 npm 包 - API Promise化-- miniprogram-api-promise
  • 出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错
  • C语言函数介绍(上)
  • [Qt][QSS][下]详细讲解
  • Makefile简单使用
  • 30天自制操作系统-2
  • extjs4学习之配置
  • interface和setter,getter
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java多态
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js正则,这点儿就够用了
  • Kibana配置logstash,报表一体化
  • Map集合、散列表、红黑树介绍
  • Objective-C 中关联引用的概念
  • OSS Web直传 (文件图片)
  • v-if和v-for连用出现的问题
  • 高性能JavaScript阅读简记(三)
  • 构造函数(constructor)与原型链(prototype)关系
  • 力扣(LeetCode)965
  • 前端面试之闭包
  • 前端学习笔记之观察者模式
  • 如何合理的规划jvm性能调优
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 山寨一个 Promise
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 用Python写一份独特的元宵节祝福
  • 带你开发类似Pokemon Go的AR游戏
  • !$boo在php中什么意思,php前戏
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (14)Hive调优——合并小文件
  • (3)(3.5) 遥测无线电区域条例
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计大学生兼职系统
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (万字长文)Spring的核心知识尽揽其中
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)AS3正则:元子符,元序列,标志,数量表达符