2452021-03-05 15:55:49balintttTevefarmcpp14Hibás válasz 38/50105ms13832 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){
        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
base38/50
1Elfogadva0/02ms1740 KiB
2Elfogadva0/02ms1904 KiB
3Elfogadva4/41ms1852 KiB
4Elfogadva4/41ms1868 KiB
5Elfogadva4/41ms1876 KiB
6Elfogadva4/42ms1920 KiB
7Elfogadva4/443ms7976 KiB
8Elfogadva6/654ms9152 KiB
9Elfogadva6/665ms10216 KiB
10Elfogadva6/678ms11624 KiB
11Hibás válasz0/690ms12756 KiB
12Hibás válasz0/6105ms13832 KiB