69492023-12-21 08:24:42Huni136Tevefarmcpp17Hibás válasz 0/50100ms16732 KiB
#include <iostream>
#include <vector>
#include <set>
#include <bitset>
#include <fstream>
using namespace std;

ifstream fin("be.txt");

vector<int> vc[100001];
int n;
long long *ertekek;
long long *megoldas;
set<int> valami;
//bitset<100001> lehetnek(false);
//set<int> lehetnek;

//int *t;

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;

       // valami.insert(i);
        ertekek[i]=x;
        megoldas[i]=x;
    }

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

    //megold(1);
    for(auto it: vc[1])
    {
        megold(it);
    }

    for(auto it: vc[1])
    {
        megoldas[1]+=megoldas[it];
    }

    for(auto it: vc[1])
    {
        eredmeny(it);
    }
   //eredmeny(1);
    // set<int> ered;
    cout<<megoldas[1]<<endl;

    // for(int i=1;i<=n;i++)
    // {
    //     if(megoldas[i]==ertekek[i])
    //     {
    //         ered.insert(i);
    //     }
    // }

    cout<<valami.size()<<endl;
    for(auto it:valami)
    {
        cout<<it<<" ";
    }

    return 0;
}
/*8
130 5 7 1 2 3 3 4
1
1
2
2
2
3
3
*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Hibás válasz0/04ms6524 KiB
2Hibás válasz0/04ms6900 KiB
3Hibás válasz0/44ms6808 KiB
4Hibás válasz0/44ms7056 KiB
5Hibás válasz0/44ms7420 KiB
6Hibás válasz0/44ms7544 KiB
7Hibás válasz0/452ms13024 KiB
8Hibás válasz0/663ms14168 KiB
9Hibás válasz0/674ms15360 KiB
10Hibás válasz0/689ms16732 KiB
11Hibás válasz0/689ms14388 KiB
12Hibás válasz0/6100ms15352 KiB