93192024-02-20 13:04:24AGergoTevefarmcpp17Hibás válasz 38/5045ms12316 KiB
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> graf;
vector<int> teveCount;
vector<int> Sum;
vector<int> ansList(0);

int value(int ID)
{
    if(Sum[ID] == 0)
    {
        if(graf[ID].size()==0)
        {
            //cout << "sima: " << ID << "-" << teveCount[ID] << endl;
            Sum[ID] = teveCount[ID];
            return teveCount[ID];

        }
        else
        {
            for(int i:graf[ID])
            {
                Sum[ID] += value(i);
                //cout << "a" << i << endl;
            }
            if(Sum[ID] >= teveCount[ID])
            {

                teveCount[ID] = Sum[ID];
                //graf[ID].resize(0);
                //cout << "ertek1: " << ID << "-" << teveCount[ID] << ":" << Sum[ID] << endl;
                return(Sum[ID]);
            }
            else
            {
                graf[ID].resize(0);
                //cout << "ertek2: " << ID << "-" << teveCount[ID] << ":" << Sum[ID] << endl;
                Sum[ID] = teveCount[ID];
                return(teveCount[ID]);
            }
        }
    }
    else
    {
        return(Sum[ID]);
    }
}

void addList(int ID)
{
    if(graf[ID].size()==0)
    {
        ansList.resize(ansList.size()+1);
        ansList[ansList.size()-1] = ID;
    }
    else
    {
        for(int i:graf[ID])
        {
            addList(i);
        }
    }
}
int main()
{
    cin.tie(0);
    iostream::sync_with_stdio(0);
    int szam;
    cin >> szam;

    teveCount.resize(szam+1);
    Sum.resize(szam+1,0);


    for(int i=1; i<=szam;i++)
    {
        cin >> teveCount[i];
    }

    graf.resize(szam+1,vector<int>());
    //vector<int> grafto(szam+1);

    int t;
    for(int i=2; i<=szam;i++)
    {
        cin >> t;
        graf[t].resize(graf[t].size()+1);
        graf[t][graf[t].size()-1] = i;

        //grafto[i] = t;
    }

    cout << value(1) << endl;
    addList(1);

    cout << ansList.size() << endl;

    for(int i: ansList)
    {
        cout << i << " ";
    }

}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base38/50
1Elfogadva0/03ms1824 KiB
2Elfogadva0/03ms2240 KiB
3Elfogadva4/43ms2268 KiB
4Elfogadva4/43ms2448 KiB
5Elfogadva4/43ms2692 KiB
6Elfogadva4/43ms2940 KiB
7Elfogadva4/425ms8184 KiB
8Elfogadva6/628ms9224 KiB
9Elfogadva6/634ms10328 KiB
10Elfogadva6/637ms11320 KiB
11Hibás válasz0/643ms11276 KiB
12Hibás válasz0/645ms12316 KiB