240682026-02-04 06:57:01szjTevefarmcpp17Accepted 50/5054ms8396 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll n, i, a;
    cin >> n;
    ll ae[n], ke[n]={}, apa[n], nr[n]={};
    vector<vector<int>> vec(n);
    for(i=0; i<n; i++)cin >> ae[i];
    apa[0]=-1;
    for(i=1; i<n; i++)
    {
        cin >> apa[i];
        apa[i]--;
        vec[apa[i]].push_back(i);
        nr[apa[i]]++;
    }
    queue<int>q;
    for(i=0; i<n; i++)
    {
        if(nr[i]==0)
        {
            q.push(i);
            ke[i]=ae[i];
        }
    }
    while(!q.empty())
    {
        a=q.front();
        q.pop();
        nr[apa[a]]--;
        ke[a]=max(ke[a], ae[a]);
        ke[apa[a]]+=ke[a];
        if(nr[apa[a]]==0 && apa[a]!=-1)q.push(apa[a]);
    }
    cout << ke[0] << endl;
    vector<ll> veg;
    q.push(0);
    while(!q.empty())
    {
        a=q.front();
        q.pop();
        if(ae[a]<ke[a])for(auto i:vec[a])q.push(i);
        else veg.push_back(a);
    }
    cout << veg.size() << endl;
    for(auto i:veg)cout << i+1 << " ";
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted4/41ms316 KiB
4Accepted4/41ms316 KiB
5Accepted4/41ms336 KiB
6Accepted4/41ms316 KiB
7Accepted4/423ms4392 KiB
8Accepted6/628ms5200 KiB
9Accepted6/632ms6128 KiB
10Accepted6/635ms6632 KiB
11Accepted6/648ms7664 KiB
12Accepted6/654ms8396 KiB