2332021-03-05 10:50:27mraronTevefarmcpp14Elfogadva 50/5061ms21272 KiB
#include <bits/stdc++.h>

using namespace std;

int n;
long long t[100000];
vector<int> g[100000];
bool choose[100000], visited[100000];
vector<int> cities;

long long calc(int p)
{
    visited[p] = true;
    long long sum = 0;
    for (int q : g[p])
    {
        if (!visited[q])
        {
            sum += calc(q);
        }
    }
    if (t[p] < sum)
    {
        return sum;
    }
    else
    {
        choose[p] = true;
        return t[p];
    }
}

void get_cities(int p)
{
    visited[p] = true;
    if (choose[p])
    {
        cities.push_back(p);
    }
    else
    {
        for (int q : g[p])
        {
            if (!visited[q])
            {
                get_cities(q);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        cin >> t[i];
    }

    for (int i = 1; i < n; ++i)
    {
        int p;
        cin >> p;
        --p;
        g[i].push_back(p);
        g[p].push_back(i);
    }

    cout << calc(0) << '\n';

    fill(visited, visited + n, false);
    get_cities(0);

    cout << cities.size() << '\n';
    for (int x : cities)
    {
        cout << x + 1 << ' ';
    }
    cout << '\n';

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/04ms6592 KiB
2Elfogadva0/03ms6704 KiB
3Elfogadva4/43ms6588 KiB
4Elfogadva4/43ms6600 KiB
5Elfogadva4/44ms6624 KiB
6Elfogadva4/44ms6788 KiB
7Elfogadva4/426ms11800 KiB
8Elfogadva6/632ms13328 KiB
9Elfogadva6/637ms15032 KiB
10Elfogadva6/643ms16640 KiB
11Elfogadva6/657ms18948 KiB
12Elfogadva6/661ms21272 KiB