1030 2022. 02. 25 17:20:18 Kevinke12 Tevefarm cpp14 Elfogadva 50/50 112ms 20948 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int N;
ll be1;
vector<int> ellista[100005];
vector<ll> tevek;
pair<ll, ll> ans[100005]; //benne, nincs benne

pair<ll, ll> Mely(int cs)
{
    pair<ll, ll> akt; akt.first=0; akt.second=0;
    akt.first=tevek[cs-1];

    for(int a:ellista[cs])
    {

        //cout << cs << ":" << a << "\n";
        pair<ll, ll> uj;
        uj = Mely(a);
        //akt.first+=uj.second;
        akt.second += max(uj.first, uj.second);
    }
    ans[cs]=akt;
    return akt;
}
vector<int> ki;

void Mely2(int cs)
{
    if(ans[cs].first>ans[cs].second)
        ki.push_back(cs);
    else
    {
        for(int a:ellista[cs])
        {
            Mely2(a);
        }
    }
}


int main()
{
    cin >> N;
    for(int i = 0; i < N; i++)
    {
        cin >> be1;
        tevek.push_back(be1);
    }
    for(int i = 2; i <= N; i++)
    {
        cin >> be1;
        ellista[be1].push_back(i);
    }
    Mely(1);

    /*for(int i = 1; i <= N; i++)
    {
        cout << i << ":" << ans[i].first << " " << ans[i].second << "\n";
    }*/

    cout << max(ans[1].first, ans[1].second) << "\n";
    Mely2(1);
    cout << ki.size() << "\n";
    for(int a:ki)
        cout << a << " "; cout << "\n";

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 4ms 6544 KiB
2 Elfogadva 0/0 4ms 6660 KiB
3 Elfogadva 4/4 3ms 6620 KiB
4 Elfogadva 4/4 3ms 6628 KiB
5 Elfogadva 4/4 3ms 6648 KiB
6 Elfogadva 4/4 4ms 6700 KiB
7 Elfogadva 4/4 43ms 11344 KiB
8 Elfogadva 6/6 52ms 12912 KiB
9 Elfogadva 6/6 65ms 14668 KiB
10 Elfogadva 6/6 74ms 16444 KiB
11 Elfogadva 6/6 98ms 18472 KiB
12 Elfogadva 6/6 112ms 20948 KiB