博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 381 D Alyona and a tree(倍增)(前缀数组)
阅读量:7112 次
发布时间:2019-06-28

本文共 2586 字,大约阅读时间需要 8 分钟。

Alyona and a tree

time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Alyona has a tree with n vertices. The root of the tree is the vertex 1. In each vertex Alyona wrote an positive integer, in the vertex i she wrote ai. Moreover, the girl wrote a positive integer to every edge of the tree (possibly, different integers on different edges).

Let's define dist(v, u) as the sum of the integers written on the edges of the simple path from v to u.

The vertex v controls the vertex u (v ≠ u) if and only if u is in the subtree of v and dist(v, u) ≤ au.

Alyona wants to settle in some vertex. In order to do this, she wants to know for each vertex v what is the number of vertices u such that v controls u.

Input

The first line contains single integer n (1 ≤ n ≤ 2·105).

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — the integers written in the vertices.

The next (n - 1) lines contain two integers each. The i-th of these lines contains integers pi and wi (1 ≤ pi ≤ n, 1 ≤ wi ≤ 109) — the parent of the (i + 1)-th vertex in the tree and the number written on the edge between pi and (i + 1).

It is guaranteed that the given graph is a tree.

Output

Print n integers — the i-th of these numbers should be equal to the number of vertices that the i-th vertex controls.

Examples
Input
5 2 5 1 4 6 1 7 1 1 3 5 3 6
Output
1 0 1 0 0
Input
5 9 7 8 6 5 1 1 2 1 3 1 4 1
Output
4 3 2 1 0
Note

In the example test case the vertex 1 controls the vertex 3, the vertex 3 controls the vertex 5 (note that is doesn't mean the vertex 1 controls the vertex 5).

【分析】题意就不说了,说下怎么做。很显然暴力肯定超时。对于每一个节点,用倍增的思想,fa[i][x]、cost[i][x]数组分别记录x节点往上第2的i次方个祖先编号和与那个祖先的距离。如果节点x对节点f有一个贡献,那么x对处于x和f之间的节点也应该有一个贡献,所以用前缀数组的思想,ans[x]++,ans[f]--,然后只需要在dfs的时候一个一个累加就行了。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define met(a,b) memset(a,b,sizeof a)#define pb push_backtypedef long long ll;using namespace std;const int N = 2e5+50;int n,m,k,u;int fa[20][N];ll cost[20][N];ll a[N],ans[N];struct man{ int son; ll co;};vector
edg[N];void dfs(int x){ for(int i=1;fa[i-1][fa[i-1][x]];i++){ fa[i][x]=fa[i-1][fa[i-1][x]]; cost[i][x]=cost[i-1][x]+cost[i-1][fa[i-1][x]]; } for(int i=0;i
=0;i--){ if(cost[i][x]<=c&&fa[i][x]){ c-=cost[i][x]; x=fa[i][x]; } } return x;}void sum_dfs(int x){ for(int i=0;i

 

转载于:https://www.cnblogs.com/jianrenfang/p/6117471.html

你可能感兴趣的文章
Spring Security 使用总结
查看>>
Java验证
查看>>
一道CSS笔试题
查看>>
慕课网_《模式的秘密之单例模式》学习总结
查看>>
Struts2开发入门指南
查看>>
Ajax实现原理
查看>>
《深入理解ES6》笔记——解构:使数据访问更便捷(5)
查看>>
不再碎片化学习,快速掌握 H5 直播技术
查看>>
命令行神器推荐
查看>>
阿里云视频直播的相关准本工作(验签)
查看>>
2017-07-12 前端日报
查看>>
一个可供创业公司借鉴的持续集成技术实践
查看>>
PAI在线深度学习开发产品DSW发布
查看>>
Windows的Linux子系统搭建数据科学环境
查看>>
Branckets快捷键
查看>>
windows下nodejs的安装和hello world小应用的创建
查看>>
赶紧登陆百家号看看,有没有被降级
查看>>
使用Eclipse进行PHP的服务器端调试
查看>>
在Visual Sutdio 2017中使用boost库
查看>>
Java中的‘锁’- synchronized、ReentrantLock、ReentrantReadWriteLock
查看>>