CF739B
深搜的过程中保存路径,二分路径中满足要求的区段。不必将每个节点的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的更多相关文章
- 【CF739B】Alyona and a tree(树上差分,二分,树形DP)
题意:给出一棵有根树,树上每个点.每条边都有一个权值. 现在给出“控制”的定义:对一个点u,设点v在其子树上,且dis(u,v)≤av,则称u控制v. 要求求出每个点控制了多少个点 n (1 ≤ n ...
- CF739B Alyona and a tree
嘟嘟嘟 前缀和+倍增+树上差分 假设\(v\)是\(u\)子树中的一个点,那么\(u\)能控制\(v\)的条件是受\(v\)的权值的限制,而并非\(u\).因此我们就能想到计算每一个点的贡献,即\(v ...
随机推荐
- table内 获取同一行 其他列的value
table内 获取同一行 其他列的value function move(obj,ud){ var code = document.getElementById("reportName&q ...
- PowerDesigner 把Comment写到name中 和把name写到Comment中
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文.Name用来显 示,Code在代码中使用,但Comment中的文字会保 ...
- JavaScript ES6中export、export default、import用法和区别
相信熟悉JS ES6的同学都知道export.export default是导出,import是导入的意思. 那么问题就来了, 1.import 导入要怎么用? 2.export.export def ...
- JAVA 数组的常用操作
目录: 声明数组: 初始化数组: 查看数组长度: 遍历数组: int数组转成string数组: 从array中创建arraylist: 数组中是否包含某一个值: 将数组转成set集合: 将数组转成li ...
- c/c++面试19-22----inline的那些事儿
19 为什么引入内联函数 a:宏定义为什么效率高 通常替代c语言中表达式形式的宏定义来解决程序函数调用问题,使用的是预处理器实现,没有参数压栈等到做. 缺点: (1) 仅仅进行简单的替换,不能进行参数 ...
- ASP.NET Core MVC 2.x 全面教程_汇总贴
Reshaper快捷键盘 快速生成属性:prop Ctrl+. ASP.NET Core MVC 2.x 全面教程:https://www.bilibili.com/video/av38392956 ...
- java的Set, List, Map简单介绍
Set, List, Map Set和List,Map都是集合,Set和List都是继承于Collection接口,而Map不是. 1.Map(映射) :Map是以key,Value的形式存储数据的映 ...
- JavaScript 基础 (变量声明, 数据类型, 控制语句)
创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...
- 洛谷 - P1020 - 导弹拦截 - 最长上升子序列
https://www.luogu.org/problemnew/show/P1020 终于搞明白了.根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量. 呵呵手写二分果然功能很多,想清楚自 ...
- MySQL之避免插入重复数据
INSERT ignore INTO `$table_name`($field_name) VALUES(),(),(),()"; //若重复数据可以添加,请在对应的数据表字段中添加数据库索 ...