蒟蒻代码在点15 RE了,返回错误Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.
。提交记录在这里。求调。
#include<iostream>
#include<stack>
#include<queue>
#include<vector>
#include<deque>
#include<algorithm>
using namespace std;
int n,fa[1000010];
long long sum[1000010],w[1000010],c[1000010],ans[1000010];
deque<int> cur;
stack<int> removed;
long long dq_sum;
vector<int> rev_edge[1000010];
void dfs(int cur_vertex){
cur.push_back(cur_vertex);
dq_sum+=w[cur_vertex];
if(dq_sum<=c[cur_vertex]){
while(removed.size()&&dq_sum+w[removed.top()]<=c[cur_vertex]){
cur.push_front(removed.top());
dq_sum+=w[removed.top()];
removed.pop();
}
}else{
while(cur.size()&&dq_sum>c[cur_vertex]){
dq_sum-=w[cur.front()];
removed.push(cur.front());
cur.pop_front();
}
}
ans[cur_vertex]=cur.size();
for(auto i:rev_edge[cur_vertex]){
sum[i]=sum[cur_vertex]+w[i];
dfs(i);
}
dq_sum-=w[cur_vertex];
cur.pop_back();
}
int main(){
cin>>n;
fa[1]=1;
for(int i=2;i<=n;i++){
cin>>fa[i];
rev_edge[fa[i]].push_back(i);
}
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=1;i<=n;i++){
cin>>c[i];
}
dfs(1);
for(int i=1;i<=n;i++){
cout<<ans[i]<<" ";
}
}