玄关
查看原帖
玄关
941628
Max_robot楼主2024/8/30 14:59
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
long long n;
array<vector<int>, maxn> e;
array<int, maxn> w, c, p, ans;
vector<long long> stk;
inline int read(){
	int x;
	cin>>x;
	return x;
}
void dfs(const int u) {
	stk.push_back(w.at(u)+stk.back());
 	int ret=0;
	for(int l=0,r=stk.size()-1, mid=(l+r)>>1; l<=r; mid=(l+r)>>1)
		if(stk.back()-stk.at(mid)<=c.at(u))
  			r=(ret=mid)-1;
		else
			l=mid+1;
 	ans.at(u)=stk.size()-ret-1;
	for(auto v:e[u])
		dfs(v);
  	stk.pop_back();
}
int main() {
	cin>>n;
	for(int i=2;i<=n;i++)
  		e.at(p.at(i)=read()).push_back(i);
	generate_n(w.begin()+1,n,read);
	generate_n(c.begin()+1,n,read);
	stk.push_back(0);
 	dfs(1);
  	for(int i=1;i<=n;i++)
  		cout<<ans.at(i)<<" \n"[i==n];
  	return 0;
}

编译错误

2024/8/30 14:59
加载中...