Я работал над проблемой из раунда CodeForces # 660 Проблема D
Мой код выглядит следующим образом:
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> child; //Array of b[i](parent) vs i(child)
vector<long long int> a; //We will update it later, and will be our subtree
vector<int> b,found;
void DFS(int index_ptr ,int *answer){
if(found[index_ptr] == 0){
found[index_ptr] = 1;
//Call childor
for(int i=0;i<child[index_ptr].size();i++){
DFS(child[index_ptr][i], answer);
}
//As we are traversing back just add the answer
*answer += a[index_ptr];
if(a[index_ptr] > 0){
a[b[index_ptr]] += a[index_ptr];
}
}
return;
}
int main()
{
int n,i,answer;
cin >> n;
a.clear();
a.resize(n);
b.clear();
b.resize(n);
found.clear();
found.resize(n);
for(i=0;i<n;i++){
cin >> a[i];
found[i] = 0;
}
vector<int> parent;
for(i=0;i<n;i++){
cin >> b[i];
if(b[i]==-1)
parent.push_back(i);
}
child.clear();
child.resize(n);
for (i=0;i<n;i++){
child[b[i]].push_back(i);
}
for(i=0;i<parent.size();i++){
DFS(i, &answer);
}
cout << answer << endl;
return 0;
}
Но он возвращает ошибку сегментации
После запуска gdb
он показывает следующие результаты:
Breakpoint 3, main () at flintTreasure_V2.cpp:54
54 child[b[i]].push_back(i);
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x000055555555692d in __gnu_cxx::new_allocator<int>::construct<int, int const&>
(this=0x55555576e368, __p=0x4)
at /usr/include/c++/7/ext/new_allocator.h:136
136 { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
Я скомпилировал его с тегом -Wall
, и он не показал никаких предупреждений, о которых я должен беспокоиться
Я никогда раньше не сталкивался с этим типом ошибки сегментации, я думаю, это как-то связано с моим векторным распределением или использованием