#include <iostream>
#include <vector>
#include <queue>
using namespace std;
//ifstream cin("file.in");
//ofstream cout("file.out");
struct adat
{
bool jo,lat;
int teve;
vector <int> sz;
};
queue <int> s;
vector <adat> x;
int n,i,a,db;
long long rekurzio (int pont)
{
long long ss=0;
if(!x[pont].sz.empty())
{
for(auto &e:x[pont].sz)
{
ss+=rekurzio(e);
}
if(x[pont].teve>=ss)
{
x[pont].jo=1;
return x[pont].teve;
}else{
return ss;
}
}else{
x[pont].jo=1;
return x[pont].teve;
}
}
void rekur (int pont)
{
if(x[pont].jo==1)
{
x[pont].lat=1;
++db;
}else{
for(auto &e:x[pont].sz)
rekur(e);
}
}
int main()
{
cin>>n;
x.resize(n+1);
for(i=1; i<=n; ++i)
{
cin>>x[i].teve;
}
for(i=2; i<=n; ++i)
{
cin>>a;
x[a].sz.push_back(i);
}
cout<<rekurzio(1)<<'\n';
rekur(1);
cout<<db<<'\n';
for(i=1; i<=n; ++i)
{
if(x[i].lat)
cout<<i<<' ';
}
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
base | 50/50 | ||||||
1 | Elfogadva | 0/0 | 3ms | 1812 KiB | |||
2 | Elfogadva | 0/0 | 3ms | 2236 KiB | |||
3 | Elfogadva | 4/4 | 2ms | 2256 KiB | |||
4 | Elfogadva | 4/4 | 2ms | 2416 KiB | |||
5 | Elfogadva | 4/4 | 2ms | 2640 KiB | |||
6 | Elfogadva | 4/4 | 3ms | 2740 KiB | |||
7 | Elfogadva | 4/4 | 41ms | 7164 KiB | |||
8 | Elfogadva | 6/6 | 52ms | 8608 KiB | |||
9 | Elfogadva | 6/6 | 59ms | 9424 KiB | |||
10 | Elfogadva | 6/6 | 67ms | 10596 KiB | |||
11 | Elfogadva | 6/6 | 92ms | 11320 KiB | |||
12 | Elfogadva | 6/6 | 101ms | 12536 KiB |