2442021-03-05 15:55:15balintttTevefarmcpp14Hibás válasz 34/50104ms14576 KiB
#include<bits/stdc++.h>

using namespace std;

class pont{
public:
    vector<int> hova;
    long long mx;
    bool finish = 1;
    int index = 0;
    int dfs();
    void dfs2();
};

int n;

vector<pont> p;

int pont::dfs(){
    long long mx2 = 0;
    for(int i:hova){
        mx2+=p[i].dfs();
    }
    if(mx2 > mx || index == 0){
        mx = mx2;
        finish = 0;
    }
    return mx;
}

stack<int> er;

void pont::dfs2(){
    if(finish){
        er.push(index);
    } else {
        for(int i : hova){
            p[i].dfs2();
        }
    }
}

int main(){
    cin >> n;
    p.resize(n);
    for(int i=0;i<n;i++){
        cin >> p[i].mx;
        p[i].index = i;
    }
    int a;
    for(int i=1;i<n;i++){
        cin >> a;
        --a;
        p[a].hova.push_back(i);
    }
    cout << p[0].dfs() << '\n';
    p[0].dfs2();
    cout << er.size() << '\n';
    while(er.size()){
        cout << er.top()+1 << ' ';
        er.pop();
    }
return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base34/50
1Elfogadva0/02ms1736 KiB
2Elfogadva0/02ms1896 KiB
3Hibás válasz0/41ms1856 KiB
4Elfogadva4/41ms1868 KiB
5Elfogadva4/41ms1888 KiB
6Elfogadva4/42ms1920 KiB
7Elfogadva4/448ms7924 KiB
8Elfogadva6/663ms9596 KiB
9Elfogadva6/664ms11372 KiB
10Elfogadva6/674ms12792 KiB
11Hibás válasz0/6104ms13500 KiB
12Hibás válasz0/6104ms14576 KiB