深搜的过程中保存路径,二分路径中满足要求的区段。不必将每个节点的ans加1,只需将合法区段末尾加1同时将开头减1来表示并保存在一个“前缀”数组中即可。最后再dfs一次累加得到答案。

 #include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#define MAXN 200000
using namespace std;
typedef long long ll;
int n, a[MAXN + ], res[MAXN + ], path[MAXN + ];
ll sum[MAXN + ], ans[MAXN + ];
struct node
{
int to, cost;
};
vector<node> G[MAXN + ];
void solve(int x, int d, ll s)
{
sum[d] = s;
path[d] = x;
int l = lower_bound(sum + , sum + d + , s - a[x]) - sum - ;
res[path[d]]++;
res[path[l]]--;
for (int i = ; i < G[x].size(); i++)
{
solve(G[x][i].to, d + , s + G[x][i].cost);
}
}
void dfs(int x)
{
ans[x] = res[x];
for (int i = ; i < G[x].size(); i++)
{
dfs(G[x][i].to);
ans[x] += ans[G[x][i].to];
}
}
int main()
{
cin >> n;
for (int i = ; i <= n; i++)
{
scanf("%d", &a[i]);
}
for (int i = ; i < n - ; i++)
{
int x, y;
scanf("%d %d", &x, &y);
node tmp;
tmp.to = i+;
tmp.cost = y;
G[x].push_back(tmp);
}
solve(, , );
dfs();
for (int i = ; i <= n; i++)
printf("%I64d ", ans[i]-);
puts("");
//("pause");
return ;
}

CF739B的更多相关文章

  1. 【CF739B】Alyona and a tree(树上差分,二分,树形DP)

    题意:给出一棵有根树,树上每个点.每条边都有一个权值. 现在给出“控制”的定义:对一个点u,设点v在其子树上,且dis(u,v)≤av,则称u控制v. 要求求出每个点控制了多少个点 n (1 ≤ n  ...

  2. CF739B Alyona and a tree

    嘟嘟嘟 前缀和+倍增+树上差分 假设\(v\)是\(u\)子树中的一个点,那么\(u\)能控制\(v\)的条件是受\(v\)的权值的限制,而并非\(u\).因此我们就能想到计算每一个点的贡献,即\(v ...

随机推荐

  1. Json 不同语言的使用

    Javascript: 1.使用eval var parse_json_by_eval = function(str){ return eval('('+str+')'); } var value = ...

  2. 小程序wx:key中的关键字*this

    “保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如果是对象则不可以 data:{ array:[1,2,3,4,5], ob ...

  3. 8个超炫的 Web 效果

    CodePen 是一个在线的 HTML.CSS 和 JavaScript 代码编辑器,能够编写代码并即时预览效果.你在上面可以在线展示自己的作品,也可以看到其他人在网页中实现的各种令人惊奇的效果. 今 ...

  4. git 系统中 post-receive 钩子不能正常执行 git pull 解决方法

    有一个需求是本地git在push到远程 git repo 之后,在远程服务器上自动在/dir/foo下执行 git pull 的操作.想来是一个很简单的需求,不就是在远程的 foo.git 仓库中的 ...

  5. CF-805A

    A. Fake NP time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  6. 前端基础 之css

    css 介绍 css(层叠样式表)定义如何显示html 元素 当浏览器读到一个样式表, 他就会按照这个表对文档进行格式化(渲染) css语法 css实例 css 注释 注释是代码之母 /* 这是注释* ...

  7. 7.11实习培训日志-Git Linux

    Git git子模块 先在GitHub创建两个空的respository,一个super_project和一个sub_project. 然后在git bash中向库中写入一些文件. 在super_pr ...

  8. CCF 201512-3 画图 (DFS搜索+模拟)

    问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术.例如,下图是用 ASCII 字符画出来的 CSPRO 字样. ..____.____..____. ...

  9. Angular6在自定义指令中使用@HostBingDing() 和@HostListener()

    emmm,,,最近在为项目的第二阶段铺路,偶然看到directive,想想看因为项目已经高度集成了第三方组件,所以对于自定义指令方面的经验自己实在知之甚少,后面经过阅读相关资料,总结一篇关于在自定义指 ...

  10. [3dmax教程] 人物+骨骼+蒙皮+动画教程

    人物+骨骼+蒙皮+动画完整教程选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个.  在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做4 ...