time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard 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).

【题目链接】:http://codeforces.com/contest/740/problem/D

【题解】



可以用一个类似”前缀长度”的东西来搞;

设dis[x]表示根节点到x节点上的边权和.

则x这个节点是被u节点控制的,当且仅当

dis[x]-dis[u]<=a[x];

即dis[x]-a[x] <= dis[u];

而dis这个数组如果在dfs序上,肯定是单调递增的.

所以维护一下dfs序、维护一下dis数组;

在处理x的出度的时候

找出dis数组中第一个满足dis[x]-a[x]<=dis[u]

的u节点;

则u->x的路径上的所有点都能够控制x节点.

而u节点以上的节点都不能控制x节点.

设u节点的dfs序的上一个节点为y

则让ans[y]–;

然后在dfs的时候累加答案即可;

设当前节点为x,出度节点为y

则ans[x]+=ans[y];

当遇到那些ans被减过的节点(即执行过ans[x]–的节点x);

则在算的时候就会把那个不属于它的节点给扣掉.

而以上的节点相应的也会受“ans[x]–”的也不会算那些不属于它们的节点了.

一开始让ans[x]都等于1;

最后再减去1即可.

这个方法很巧妙。

如果不理解就多想想吧.



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
#define all(x) x.begin(),x.end() typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int MAXN = 2e5+10;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0); int n;
LL a[MAXN];
LL ans[MAXN],dis[MAXN];
vector <LL> w[MAXN];
vector <int> G[MAXN];
vector < pair<LL,int> > temp; void dfs(int x,int fa)
{
ans[x] = 1;
LL t = dis[x]-a[x];
int pos = lower_bound(all(temp),mp(t,0))-temp.begin();
pos--;
if (pos >= 0)
ans[temp[pos].se]--;
temp.pb(mp(dis[x],x));
int len = G[x].size();
rep1(i,0,len-1)
{
int y = G[x][i];
if (y==fa) continue;
dis[y] = dis[x] + w[x][i];
dfs(y,x);
ans[x] += ans[y];
}
temp.pop_back();
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
rep1(i,1,n)
rel(a[i]);
rep1(i,2,n)
{
int fa;LL cost;
rei(fa);rel(cost);
G[fa].pb(i);
w[fa].pb(cost);
G[i].pb(fa);
w[i].pb(cost);
}
dfs(1,-1);
rep1(i,1,n)
{
printf("%I64d",ans[i]-1);
if (i==n)
puts("");
else
putchar(' ');
}
return 0;
}

【30.36%】【codeforces 740D】Alyona and a tree的更多相关文章

  1. codeforces 381 D Alyona and a tree(倍增)(前缀数组)

    Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  2. 【Round #36 (Div. 2 only) C】Socks Pairs

    [题目链接]:https://csacademy.com/contest/round-36/task/socks-pairs/ [题意] 给你n种颜色的袜子,每种颜色颜色的袜子有ai只; 假设你在取袜 ...

  3. 【Round #36 (Div. 2 only) B】Safe Spots

    [题目链接]:https://csacademy.com/contest/round-36/task/safe-spots/ [题意] 给你n个数字构成的序列; 每个位置上的数都由0和1组成; 对于每 ...

  4. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  5. codeforces 682C C. Alyona and the Tree(dfs)

    题目链接: C. Alyona and the Tree time limit per test 1 second memory limit per test 256 megabytes input ...

  6. 【30.93%】【codeforces 558E】A Simple Task

    time limit per test5 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  7. 【36.86%】【codeforces 558B】Amr and The Large Array

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【30.49%】【codeforces 569A】Music

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. 【30.23%】【codeforces 552C】Vanya and Scales

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. HDU——T 3336 Count the string

    http://acm.hdu.edu.cn/showproblem.php?pid=3336 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  2. bind()和trigger()额外数据

    $(function(){ $('input').click(function(e,data1,data2,data3,data4){ alert(data1 + '|' + data2 + '|' ...

  3. 过滤选择器及jQuery提供的相关方法

    基本过滤器: <body> <ul> <li>列表1</li> <li class="red">列表2</li&g ...

  4. 推广一下新Blog www.hrwhisper.me

    新博客地址:www.hrwhisper.me 欢迎互访加友链~

  5. jmeter分布式测试的坑(转)

    本文转自:https://www.cnblogs.com/lsjdddddd/p/5806077.html 有关jmeter分布式测试的环境配置,大概就是那样,但是每次想要进行jmeter分布式测试的 ...

  6. 1.IntelliJ IDEA搭建SpringBoot的小Demo

    转自:http://www.cnblogs.com/weizaibug/p/6657077.html 首先简单介绍下Spring Boot,来自度娘百科:Spring Boot是由Pivotal团队提 ...

  7. Java – Reading a Large File Efficiently--转

    原文地址:http://www.baeldung.com/java-read-lines-large-file 1. Overview This tutorial will show how to r ...

  8. <%%>创建内联代码块(表达式)

    其实<%%>很早之前就见过了,只是会用一点功能,其它的不甚了解.今天偶尔见到了它的庐山真面目,现在共享给大家. 语法 代码块呈现(<%%>)定义了当呈现页时执行的内联代码或内联 ...

  9. Mine Vison base on VC++ and procilica Gige Vison SDK

    This is my first vision base on VC++6.0. I am so happy to record this time i succesfully create it b ...

  10. CView::OnPreparePrinting

    http://technet.microsoft.com/zh-cn/subscriptions/a59dff1e(v=vs.71).aspx CView::OnPreparePrinting Cal ...