SIGSEGV at 15
查看原帖
SIGSEGV at 15
555809
houmy楼主2022/12/10 11:27

蒟蒻代码在点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]<<" ";
	}
}
2022/12/10 11:27
加载中...