69522023-12-21 08:38:32Huni136Tevefarmcpp17Hibás válasz 38/5097ms16400 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;


vector<int> vc[100001];
int n;
long long *ertekek;
long long *megoldas;
set<int> valami;

int megold(int nod)
{
        long long s=0;
        for(auto it: vc[nod])
        {
            s=s+megold(it);
        }
        megoldas[nod]=max(s,ertekek[nod]);
        return max(s,ertekek[nod]);
    
}

void eredmeny(int nod)
{
    if(ertekek[nod]==megoldas[nod])
    {
        valami.insert(nod);
    }
    else
    {
        for(auto it: vc[nod])
        {
            eredmeny(it);
        }
    }
}


int main()
{
    cin>>n;
    ertekek=new long long[n+1];
    megoldas=new long long[n+1];
    int x;
    
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        ertekek[i]=x;
        megoldas[i]=x;
    }

    for(int i=2;i<=n;i++)
    {
        cin>>x;
        vc[x].emplace_back(i);
    }

    megold(1);
    eredmeny(1);
    cout<<megoldas[1]<<endl;
    cout<<valami.size()<<endl;
    for(auto it:valami)
    {
        cout<<it<<" ";
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base38/50
1Elfogadva0/04ms6520 KiB
2Elfogadva0/04ms6912 KiB
3Elfogadva4/44ms6800 KiB
4Elfogadva4/44ms7208 KiB
5Elfogadva4/44ms7084 KiB
6Elfogadva4/44ms7416 KiB
7Elfogadva4/452ms12820 KiB
8Elfogadva6/663ms13980 KiB
9Elfogadva6/675ms15356 KiB
10Elfogadva6/683ms16400 KiB
11Hibás válasz0/687ms13956 KiB
12Hibás válasz0/697ms14652 KiB