#include <iostream>
#include <vector>
#include <queue>
#include <string>
using namespace std;
struct adat
{
long long tav, db, sum;
string tevek;
vector <long long> sz;
bool lat;
};
long long i, n, j, akt, agdb, agsum;
queue <long long> s;
string agteve;
int main()
{
cin>>n;
vector <adat> x(n+1);
//vector <vector <int>> szint(n+1);
for (i=1; i<=n; ++i)
{
cin>>x[i].sum;
x[i].db=1;
x[i].tevek=to_string(i)+" ";
}
for (i=2; i<=n; ++i)
{
cin>>j;
x[j].sz.push_back(i);
}
x[1].lat=1;
x[1].tav=1;
s.push(1);
//szint[1].push_back(1);
while (!s.empty())
{
akt=s.front();
s.pop();
for (auto &e:x[akt].sz)
{
if (!x[e].lat)
{
x[e].lat=1;
x[e].tav=x[akt].tav+1;
s.push(e);
//szint[x[e].tav].push_back(e);
}
}
}
for (i=n; i>=1; --i)
{
agsum=0;
agdb=0;
agteve="";
for (auto &e:x[i].sz)
{
agsum+=x[e].sum;
agteve+=x[e].tevek;
agdb+=x[e].db;
}
if (x[i].sum<agsum)
{
x[i].tevek=agteve;
x[i].sum=agsum;
x[i].db=agdb;
}
}
cout<<x[1].sum<<"\n"<<x[1].db<<"\n"<<x[1].tevek;
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 | 2324 KiB | |||
3 | Elfogadva | 4/4 | 2ms | 2268 KiB | |||
4 | Elfogadva | 4/4 | 2ms | 2484 KiB | |||
5 | Elfogadva | 4/4 | 2ms | 2856 KiB | |||
6 | Elfogadva | 4/4 | 3ms | 3128 KiB | |||
7 | Elfogadva | 4/4 | 46ms | 17328 KiB | |||
8 | Elfogadva | 6/6 | 57ms | 20312 KiB | |||
9 | Elfogadva | 6/6 | 67ms | 22788 KiB | |||
10 | Elfogadva | 6/6 | 79ms | 25860 KiB | |||
11 | Elfogadva | 6/6 | 105ms | 29156 KiB | |||
12 | Elfogadva | 6/6 | 115ms | 31972 KiB |