社区讨论
蒟蒻求条
P1612[yLOI2018] 树上的链参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjya0qmz
- 此快照首次捕获于
- 2026/01/03 20:25 2 个月前
- 此快照最后确认于
- 2026/01/07 17:20 上个月
CPP
#include<bits/stdc++.h>
#define ll long long
#define MAX 1000001
using namespace std;
vector<int> E[MAX];
vector<int> sum;
int w[MAX], c[MAX];
int ans[MAX], n, p, pos;
void dfs(int u){
sum.push_back(sum.back() + w[u]);
int pos = 0;
int l = 0, r = sum.size() - 1;
while(l <= r){
int mid = l + (r - l) / 2;
if (sum.back() - sum[mid] <= c[u]){
pos = mid;
r = mid - 1;
}else{
l = mid + 1;
}
}
ans[u] = sum.size() - pos - 1;
for (auto i : E[u]) dfs(i);
sum.pop_back();
}
int main(){
cin >> n;
for ( int i = 2 ; i <= n ; i++ ){
cin >> p;
E[p].push_back(i);
}
for ( int i = 1 ; i <= n ; i++ ){
cin >> w[i];
}
for ( int i = 1 ; i <= n ; i++ ){
cin >> c[i];
}
sum.push_back(0);
dfs(1);
for ( int i = 1 ; i <= n ; i++ ){
cout << ans[i] << " ";
}
return 0;
}
用的前缀和加二分,帮帮本蒟蒻吧
回复
共 1 条回复,欢迎继续交流。
正在加载回复...