#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxN = 1e5+1;
vector<vector<int> > adj;
int n;
int c[mxN];
bool vis[mxN], joe[mxN];
vector<int> ans;
int dfs(int v, int p) {
vis[v] = 1;
int mxsum = c[v];
int sum = 0;
for(auto u : adj[v]) {
if(u != p) {
sum += dfs(u, v);
}
}
if (mxsum < sum) {
mxsum = sum;
joe[v] = 1;
}
return mxsum;
}
void dfs2(int v, int p) {
vis[v] = 1;
if (joe[v]) {
for(auto u : adj[v]) {
if (u != p) {
dfs2(u, v);
}
}
} else {
ans.push_back(v);
}
return;
}
signed main() {
ios::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL);
cin >> n;
adj.resize(n+1);
for(int i = 1; i <= n; i++) {
cin >> c[i];
}
for(int i = 2; i <= n; i++) {
int x;
cin >> x;
adj[i].push_back(x);
adj[x].push_back(i);
}
cout << dfs(1, 0) << endl;
memset(vis, 0, mxN);
dfs2(1, 0);
cout << ans.size() << '\n';
for(auto x : ans) {
cout << x << ' ';
}
return 0;
}