#include <bits/stdc++.h>
using namespace std;
int n;
long long t[100000];
vector<int> g[100000];
bool choose[100000], visited[100000];
vector<int> cities;
long long calc(int p)
{
visited[p] = true;
long long sum = 0;
for (int q : g[p])
{
if (!visited[q])
{
sum += calc(q);
}
}
if (t[p] < sum)
{
return sum;
}
else
{
choose[p] = true;
return t[p];
}
}
void get_cities(int p)
{
visited[p] = true;
if (choose[p])
{
cities.push_back(p);
}
else
{
for (int q : g[p])
{
if (!visited[q])
{
get_cities(q);
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> t[i];
}
for (int i = 1; i < n; ++i)
{
int p;
cin >> p;
--p;
g[i].push_back(p);
g[p].push_back(i);
}
cout << calc(0) << '\n';
fill(visited, visited + n, false);
get_cities(0);
cout << cities.size() << '\n';
for (int x : cities)
{
cout << x + 1 << ' ';
}
cout << '\n';
return 0;
}