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 ...
随机推荐
- 为什么在启动linux后进入终端提示sh-3.2#
这是Linux系统环境变量设置问题,用户登陆后确保是root权限,可以用如下这两条命令解决:-bash-3.2# cp /etc/skel/.{bash_profile,bashrc} ~-bash- ...
- 一个轻量级AOP的实现(开源)
事先声明,本项目参考AOP in C#和园内大神张逸的文章,思路神马的都不是自己的! 为了让项目的代码看起来更干净,需要一个AOP! 于是就实现了一个非常简单的,非常轻量级,有多轻量级呢? 实现的AO ...
- Unix高级环境编程
[07] Unix进程环境==================================1. 进程终止 atexit()函数注册终止处理程序. exit()或return语句: ...
- bzoj 2151 种树——贪心+后悔
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2151 似乎是半年+前讲过的.(然而看到的时候却不会了) 考虑贪心,限制就是不能选两边的.如果 ...
- POJ3211(trie+01背包)
Washing Clothes Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9384 Accepted: 2997 ...
- UESTC(LCA应用:求两点之间的距离)
Journey Time Limit: 15000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Bob has ...
- POJ1742(多重部分和问题:模板题)
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 32776 Accepted: 11131 Descripti ...
- bzoj4289
最短路 很容易想到边和边之间连边,但是这样菊花图就完蛋了 我们想办法优化一下,能不能不要每条边都连. 考虑查分,把一个点的出边串起来,这样就行了,每条无向边拆成两条就能保证了 #include< ...
- sqlserver 截取字符串
**/*******/*****/1399/* 我要取第3个'/'与第4个'/'中的内容,就是1399 create table ta( col varchar(100)) insert ta sel ...
- <正则吃饺子>:关于集合的简单整理总结
项目中用到的集合不可谓不多,对于自己的一次面试,要求说下自己用过的集合,自己开始说的并不系统也不完整,一直耿耿于怀,特整理一下,以备后期之用和帮助后来者. package com.love.malin ...