Alyona and the Tree

Descriptions

小灵决定节食,于是去森林里摘了些苹果。在那里,她意外地发现了一棵神奇的有根树,它的根在节点 1 上,每个节点和每条边上都有一个数字。

小灵注意到树上有一些节点不开心,所以她决定和它们一起玩。 如果节点 v 的子树中有一个节点 u 使得dist(v, u) > au ,那么节点 v 就会不开心。au 代表节点 u 上的数字,dist(v, u)代表连接节点 v 到节点 u 的所有边上的数字和,也就是两个节点的距离。

通过 1 条边连接到 1 个节点的那些节点被称为树的叶子,如果树只包含一个顶点,那么根也就是树的叶子。

因此小灵决定移除一些树叶,直到树上没有任何不开心的节点。请问小灵最少需要去除多少叶子呢?

Input

第 1 行输入一个整数 n (1 ≤ n ≤ 105)  —— 代表树上的节点数。

第 2 行输入 n 个整数 a1, a2, ..., an (1 ≤ ai ≤ 109) , ai 代表节点 i 上写着的数字。

接下来的 n - 1 行描述了树的边:第 i 行包含两个整数 pi 和 ci (1 ≤ pi ≤ n,  - 109 ≤ ci ≤ 109),代表有一条边连接着节点 i + 1 和节点 pi, ci 是写在边上的数字。

Output

输出 1 个整数 —— 代表为了使得树上完全没有不开心的节点,小灵最少需要去除的叶子数量。

Example

Input
9
88 22 83 14 95 91 98 53 11
3 24
7 -8
1 67
1 64
9 65
5 12
6 -80
3 8
Output
5
提示

下面的图片代表了从树上去除叶子的过程 :

题目链接

https://vjudge.net/problem/CodeForces-682C

对这个问题进行简单的转变,将原来问题求去掉几个转变成满足几个,这道题目就会简单很多。

从祖先到当前的叶子节点,问你有几个满足是其祖先到叶子的权值的和小于等于当前的节点值的。

dfs搜一下即可

如果最大值为负了我们要赋值为0,因为我们在下面可能还会碰到权值为正的边,此时的最大值肯定是这条权值为正的边,所有要把最大值赋值为0

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 100000+5
using namespace std;
int n;
//v[i].push_back(x,y)
//i点与x点的距离为y
//v[x].push_back(i,y)
//x点与i点的距离为y
vector<pair<int,ll> >v[Maxn];
int a[Maxn];//存点
int vis[Maxn];//标记这个点是否搜过
ll ans;
void dfs(int x,ll sum)//从根节点1到x的距离sum
{
vis[x]=;//标记x搜过
if(sum<=a[x])//距离小于x的值则+1
ans++;
else
return;
for(int i=;i<v[x].size();i++)
if(!vis[v[x][i].first])
dfs(v[x][i].first,max((ll),sum+v[x][i].second));
}
int main()
{
MEM(vis,);
cin>>n;
for(int i=; i<=n; i++)
cin>>a[i];
for(int i=; i<=n; i++)
{
int p;
ll c;
cin>>p>>c;
v[i].push_back(make_pair(p,c));
v[p].push_back(make_pair(i,c));;
}
ans=;
dfs(,);
cout<<n-ans<<endl;
return ; }

【CodeForces - 682C】Alyona and the Tree(dfs)的更多相关文章

  1. 【Codeforces 682C】Alyona and the Tree

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设dis[v]表示v以上的点到达这个点的最大权值(肯定是它的祖先中的某个点到这个点) 类似于最大连续累加和 当往下走(x,y)这条边的时候,设 ...

  2. 【30.36%】【codeforces 740D】Alyona and a tree

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

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

  4. codeforces 682C Alyona and the Tree(DFS)

    题目链接:http://codeforces.com/problemset/problem/682/C 题意:如果点v在点u的子树上且dist(u,v)>a[v]则u和其整个子树都将被删去,求被 ...

  5. 【CodeForces - 501B 】Misha and Changing Handles(map)

    Misha and Changing Handles CodeForces原题是英文,这里就直接上中文好了,翻译不是太给力,但是不影响做题 ^▽^ Description  神秘的三角洲里还有一个传说 ...

  6. 【CodeForces - 598D】Igor In the Museum(bfs)

    Igor In the Museum Descriptions 给你一个n*m的方格图表示一个博物馆的分布图.每个方格上用'*'表示墙,用'.'表示空位.每一个空格和相邻的墙之间都有一幅画.(相邻指的 ...

  7. 【Unity3D实战】摇摆直升机开发实战(一)

    [Unity3D实战]摇摆直升机开发实战(一) 1.点击[Assets],创建[Sprites]和[Resources]文件夹,然后将所需要的素材导入[Sprites]文件夹中. 2.找到[Sprit ...

  8. 【gdoi2018 day2】第二题 滑稽子图(subgraph)(性质DP+多项式)

    题目大意 [gdoi2018 day2]第二题 滑稽子图(subgraph) 给你一颗树\(T\),以及一个常数\(K\),对于\(T\)的点集\(V\)的子集\(S\). 定义\(f(S)\)为点集 ...

  9. 【详解】ThreadPoolExecutor源码阅读(三)

    系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) 线程数量的 ...

随机推荐

  1. BZOJ3037 创世纪[基环树DP]

    实际上基环树DP的名字是假的.. 这个限制关系可以看成每个点有一条出边,所以就是一个内向基环树森林. 找出每个基环树的环,然后对于树的部分,做DP,设状态选或不选为$f_{x,0/1}$,则 $f_{ ...

  2. BZOJ4886 [Lydsy1705月赛]叠塔游戏[基环树]

    很妙的一道题. 由于本人过于zz,不会这道题,通过厚颜无耻翻阅题解无数终于懂了这道题,所以这里转载一位神仙的blog. 没有看懂?没事,再来一篇. 这题个人认为主要在于转化题意和建图,这两点想通了应该 ...

  3. redis geo操作

    package club.newtech.qbike.trip.domain.service; import club.newtech.qbike.trip.domain.core.Status;im ...

  4. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  5. springboot2.0入门(五)--swagger2接口API构建

    一.特点 代码变,文档变.只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性. 跨语言性,支持 40 多种语言. Swagger UI 呈现出来的是一份可 ...

  6. php判断文件是否为txt文件

    可以使用pathinfo方法来通过后缀名进行判断文件类型. /** * 获取文件后缀(如果文件名为11.11,11不是后缀,会默认11为后缀) * $file string 文件路径或者文件名 */ ...

  7. 配置魔药(DP)

    配置魔药 [问题描述] 在<Harry Potter and the Chamber of Secrets>中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从 ...

  8. windows内核情景分析之中断处理(毛德操)[转]

    中断处理 每个cpu有一张中断表,简称IDT. IDT的整体布局:[异常->空白->5系->硬](推荐采用7字口诀的方式重点记忆) 异常:前20个表项存放着各个异常的描述符(IDT表 ...

  9. JS学习-01

    01

  10. 【redis 学习系列】API的理解与使用(四)

    5.集合 集合(set)类型也是用来保存多个字符串元素,但是与列表不一样的是,集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素. 如图2-22所示,集合user:1:fol ...