Ka Chang

问答问题反馈

只看题面

  • 19.64%
  • 1000ms
  • 131072K

Given a rooted tree ( the root is node 11) of NN nodes. Initially, each node has zero point.

Then, you need to handle QQoperations. There're two types:

1\ L\ X1 L X: Increase points by XX of all nodes whose depth equals LL ( the depth of the root is zero ). (x \leq 10^8)(x≤108)

2\ X2 X: Output sum of all points in the subtree whose root is XX.

Input

Just one case.

The first lines contain two integer, N,QN,Q. (N \leq 10^5, Q \leq 10^5)(N≤105,Q≤105).

The next n-1n−1 lines: Each line has two integer aa,bb, means that node aa is the father of node bb. It's guaranteed that the input data forms a rooted tree and node 11 is the root of it.

The next QQ lines are queries.

Output

For each query 22, you should output a number means answer.

样例输入复制

3 3
1 2
2 3
1 1 1
2 1
2 3

样例输出复制

1
0

题目来源

ACM-ICPC 2018 沈阳赛区网络预赛

题目大意:给出一个有根树,有两种操作:

1.第x层的所有点权+y

2.查询以x为根的子树的权值之和。

解题思路:可以想到按照dfs序二分每一层,但是这样复杂度很高。

正解:对于某一层,如果当前曾的点数比较少,则直接在树状数组里边更改,由于查询子树的时候是连续的,所以我们可以直接得到以某个点为根节点的点数较小的层的权值之和。对于点数较多的层,我们就直接在这些层中二分。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define sca(x) scanf("%d",&x)
#define N 200005
#define pb(x) push_back(x)
#define lowb(x) (x&(-x))struct node
{int to,nt;
}g[N*2];
int tot;
int head[N],in[N],ou[N],sz[N];
LL tag[N];
vector<int>big;void addedg(int x,int y)
{g[tot].to=y;g[tot].nt=head[x];head[x]=tot++;
}vector<int>V[N];int vis[N];
int id;
void dfs(int u,int dep)
{vis[u]=1;in[u]=++id;V[dep].pb(id);for(int i=head[u];i+1;i=g[i].nt){int v=g[i].to;if(vis[v])continue;dfs(v,dep+1);}ou[u]=id;
}struct BIT
{LL c[N];int maxn;void init(int n){maxn=n;}LL ask(int x){LL ans=0;for(int i=x;i;i-=lowb(i))ans+=c[i];return ans;}void upd(int x,LL val){for(int i=x;i<=maxn;i+=lowb(i))c[i]+=val;}}bit;int main()
{int n,q;sca(n),sca(q);memset(head,-1,sizeof(head));for(int i=1;i<n;i++){int x,y;sca(x),sca(y);addedg(x,y);addedg(y,x);}dfs(1,0);int up=sqrt(n);bit.init(n);for(int i=0;i<n;i++){sz[i]=V[i].size();if(sz[i]>up)big.pb(i);}for(int i=0;i<q;i++){int op;sca(op);if(op==1){int l;LL x;scanf("%d%lld",&l,&x);if(sz[l]<=up){for(int j=0;j<sz[l];j++){bit.upd(V[l][j],x);}}else tag[l]+=x;}else{int x;scanf("%d",&x);LL ans1=bit.ask(ou[x])-bit.ask(in[x]-1);for(int j=0;j<big.size();j++){int _id=big[j];ans1+=1LL*(upper_bound(V[_id].begin(),V[_id].end(),ou[x])-lower_bound(V[_id].begin(),V[_id].end(),in[x]))*tag[_id];}printf("%lld\n",ans1);}}
}

2018沈阳网络预选赛 kachang相关推荐

  1. 2018沈阳网络赛:J kachang KD树

    把每个点建立(dfs序,depth),所有操作和查询转化为矩形操作,用KD树就可以 n(√n) n ( n ) n\sqrt(n)完成了. #include <bits/stdc++.h> ...

  2. 2018沈阳网络赛J

    给一颗树,两种操作,一种把同一层的点权值加上v,另一种求一点下的子树权值和. 按层数中点个数分块,小块直接暴力把所有点用bit更新,大块把层的值存下来. 询问的时候子树权值和为bit中的值以及其下面的 ...

  3. 2018沈阳网络赛D

    k短路模板题. #include <bits/stdc++.h> #define mem(x) memset(x,0,sizeof(x)) #define mem1(x) memset(x ...

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

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

  5. 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 ...

  6. Greedy Sequence(2019南京icpc网络预选赛)主席树求区间小于k的最大值

    题意:给出n个整数,构造s1,s2,s3-sn s1,s2,s3-sns1,s2,s3-sn,si sisi满足五个条件 1.s1[i]=i s1[i]=is1[i]=i 2.对于1<j< ...

  7. 挑战程序设计竞赛_我系首次参加第六届中国大学生程序设计竞赛网络预选赛

    点击上方蓝字关注  「龙外信息工程系」 讲述有温度的故事    传递有态度的思想 2020年9月20日12时至17时,第六届中国大学生程序设计竞赛网络赛预选赛在杭州电子科技大学OJ成功举办,黑龙江外国 ...

  8. 2018年网络视听付费用户规模惊人 视听消费习惯逐步形成

    国家广播电视总局今日在官网发布了<2018年全国广播电视行业统计公报>(以下简称报告),报告中提到,2018年网络视听付费用户规模达3.47亿人,比2017年的2.8亿人增加0.67亿人, ...

  9. 2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)

    2018宁夏网络赛 B Goldbach (米勒拉宾素数测试) 题目链接 题目大意: 给你一个偶数n (2<n<=1e18) 让你把n分解成两个素数的和.(如果有多个输出任意一个) 解题思 ...

最新文章

  1. Spring基础面试题(一)
  2. MySql中管理百万级要注意些什么东西(转载)
  3. 俄克拉荷马州立大学冯锋组博士生招聘-植物与微生物互作
  4. python元组类型的变量以及字符串类型的变量作为参数进行传值
  5. php水平线代码,在HTML中水平线标注与代码注释应该如何使用
  6. python sklearn安装_安装 scikit-learn
  7. 浅谈java对象的equals方法
  8. 第十天 Oracle安装前准备工作
  9. servletContextListener定时任务使用
  10. flask-user and flask-admin实现登录验证
  11. 【深度优先搜索】20行代码解决8皇后问题
  12. Nginx 作为Http代理服务器配置
  13. linux查看app路径下文件卡死
  14. react package.json 修改proxy进行前端跨域,通过修改homepage,更改打包路径
  15. 宝峰c1对讲机写频软件_宝峰对讲机写频软件
  16. 关于红黑树:了解是什么? 为什么设计? 会有什么效果? 什么时候用?
  17. 最小二乘解(Least-squares Minimization )
  18. dede织梦html手机模板,dede织梦cms手机站模板制作和调用方法
  19. 图像处理(12)--图像各种噪声及消除方法
  20. 网站加载图片速度提升

热门文章

  1. java找不到或无法加载主类_java找不到或无法加载主类如何解决?解决方法
  2. 使用scala轻松完成wordcount统计案例
  3. 哎呀看ted的演讲视频_设计师必看的10部TED影片
  4. 论计算机的影响论文2000字,计算机驱动研究兴趣论文
  5. ICEY攻略 论如何获得所有奖杯达成成就(没错,我就是拿CSDN写了游戏攻略)
  6. JAVA并发专题《前引篇》
  7. Python使用for循环完成剪刀石头布作业
  8. 抖音服务器在维修中如何改昵称,抖音怎么修改账号昵称 抖音账号昵称修改方法...
  9. 诺基亚手机序列号查询
  10. 根据经纬度计算两点之间的距离的公式