思路

因为不同深度的节点数量不同,数量少的节点,可以考虑直接进行单点更新,对于数量多的节点,可以直接记录这一层增加的值,查询的时候,看每一层有多少个节点,最后乘上增加的值就行了。

具体实现

先设定一个belong[maxn]数组,用于放同一层的节点的dfs序(这样做是为了可以在树状数组上进行单点更新,同一层的dfs序虽然不是连续的,但是也符合从小到大的顺序)。其次设定一个值block=1<<10,当节点数量大于block时,将这一层的编号记录下来,用一个large来储存,这样,当查询时,只要在large里遍历这些数量多的层,看每一层有多少个我们需要的节点就行了。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=6e5+7;
const int N=1e5+9;
int n,q;
struct BIT
{int n;ll bit[N];void init(int n){this->n = n + 1;for (int i = 0; i < n; i++) bit[i] = 0;}void update(int x, ll v){for (; x < n; x += x & -x) bit[x] += v;}ll query(int x){ll ret = 0;for (; x; x -= x & -x) ret += bit[x];return ret;}
} bit;
const int block=1<<10;
vector<int> g[maxn],belong[maxn],large;
int depth[maxn],in[maxn],out[maxn];
ll s[maxn];
int clk;
void dfs(int u, int d)
{in[u] = ++clk;belong[d].push_back(in[u]);for (auto& v : g[u]){depth[v] = depth[u] + 1;dfs(v, d + 1);}out[u] = clk;
}int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifscanf("%d%d",&n,&q);bit.init(n);clk=0;memset(s,0,sizeof(s));for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);g[x].push_back(y);}dfs(1,0);for(int i=0;i<=n;i++){if(belong[i].size()>block){large.push_back(i);}}while(q--){int op;scanf("%d",&op);if(op==1){int x,v;scanf("%d%d",&x,&v);if(belong[x].size()<= block){for(auto &t: belong[x]){bit.update(t,v);}}else{s[x]+=v;}}else{int x;scanf("%d",&x);int l=in[x],r=out[x];ll ans=0;ans=bit.query(r)-bit.query(l-1);for(auto &t: large){ans+=((upper_bound(belong[t].begin(),belong[t].end(),r))-\(lower_bound(belong[t].begin(),belong[t].end(),l)))*s[t];}printf("%lld\n",ans);}}return 0;
}

ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang(树分块)相关推荐

  1. ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang 分块

    https://nanti.jisuanke.com/t/31451 对每层的个数分块 当这个深度的节点个数>block时 暴力维护每个点的子树有多少个这个深度的节点 这样的层数最多有n/blo ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K)

    ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K) 复杂的模拟题懒癌患者表示写不动 D. Made In Heaven (K短路) 略 int head[MAXN]; int cure ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 Spare Tire(容斥+公式推)

    A sequence of integer \lbrace a_n \rbrace{an​} can be expressed as: \displaystyle a_n = \left\{ \beg ...

  4. ACM-ICPC 2018 焦作赛区网络预赛 J(二分+JAVA高精)

    传送门 题面: 65536K Jessie and Justin want to participate in e-sports. E-sports contain many games, but t ...

  5. 【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics

    [链接] 我是链接,点我呀:) [题意] [题解] 每个单词的前缀都不同. 不能更明示了... 裸的字典树. 模拟一下.输出一下就ojbk了. [代码] #include <bits/stdc+ ...

  6. Convex Hull (ACM-ICPC 2018 沈阳赛区网络预赛) 存个公式

    Convex Hull gay(i)={0ifi=k×x×x,x>k,k>1i×ielse}求∑i=1n∑j=1igay(j)=∑i=1n(n−i+1)gay(i)=∑i=1n(n−i+1 ...

  7. ACM-ICPC 2018 南京赛区网络预赛 J Sum(欧拉线性筛+思维)

    Sum 问题分析 题意:我们将类似于6=2⋅36=2⋅36 = 2\cdot 3这样的数称为asquare−freeintegerasquare−freeintegera\:square-free\: ...

  8. ACM-ICPC 2018 南京赛区网络预赛 J AC Challenge (状压dp)

    题意 给你n道题,在你做第ii{i}道题的时候有p[j]p[j]{p[j]}个前置条件,当这些前置条件都满足的时候,我们可以得到a[j]∗t+b[j]a[j]∗t+b[j]a[j] * t + b[j ...

  9. 【ACM-ICPC 2018 沈阳赛区网络预赛】I.Lattice's basics in digital electronics ---- 字典树

    题目传送门 做法: 用字典树存好译码词,然后模拟即可 AC代码: #include <bits/stdc++.h> using namespace std;#define IO ios_b ...

最新文章

  1. 二流四流神经网路(模型融合矩阵乘法理论实践)
  2. 【CyberSecurityLearning 32】Apache配置、Apache的访问控制设定、LAMP平台的搭建
  3. 第七天学习Java的笔记(IDEA环境配置)
  4. [JavaWeb-HTML]HTML标签_文件标签
  5. spring boot 入门-使用spring boot构建简单应用
  6. iOS开发之WKWebview(淘宝链接不自动打开淘宝和天猫的app)
  7. eviews计算covar_covariance(eviews做协整检验步骤)
  8. Jsp jsp实现原理
  9. 同一网段分化vlan问题
  10. HEU The message
  11. 腾讯云 wafer2 上手,轻松部署小程序后端!
  12. android串口通信——android-serialport-api
  13. 协卡助手无法卸载的解决办法
  14. 计算机维修套装推荐,工欲善其事,必先利其器---iFixit 54 Bit Driver Kit 维修工具套装...
  15. eNSP之IPsec 虚拟专用网配置
  16. 场景,或许才是未来空间设计的关键词,可能是最接近元宇宙的空间体验? | 浅空间专栏...
  17. Element 官方宣布了:Element UI for Vue 3.0 来了!
  18. 初步接触核心网之5G核心网系统安装
  19. npj | 宁波大学张德民团队揭示对虾生物絮团养殖系统细菌群落的调控机制
  20. java中talent-aio_通讯框架:talent-aio实例

热门文章

  1. 一文读懂知识付费SaaS行业:未来发展趋势如何?
  2. 达内学员就业率远超名校大学生就业率
  3. C#中Trim的功能介绍
  4. 微信公众平台如何给粉丝分组打标签?
  5. linux查询服务器品牌命令,查看linux服务器的品牌和型号
  6. Plugin: Memory Dump by aeon update 12.10
  7. “跳槽”一词的来历竟然是这样!汗
  8. js-键盘事件案例-小人快跑
  9. L2-032 彩虹瓶 (25 分) (栈操作)
  10. 【中国科学基金】区块链舆情存证方案设计及应用挑战——CSSCI