151302025-02-13 11:12:07antiTevefarmcpp17Hibás válasz 13/50100ms6568 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<vector<int>> children;
vector<long long> L[2];

void dfs( int u, const vector<long long>& T ){
    L[0][u] = 0;
    L[1][u] = T[u];
    for(int v : children[u]){
        dfs( v, T);
        L[0][u] += max( L[0][v], L[1][v] );
    }
}

int main(){
    int n;
    cin >> n;

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

    children.resize(n);
    for(int i=1; i<n; i++){
        int parent;
        cin >> parent;
        children[parent - 1].push_back(i);
    }
    L[0].assign(n, 0);
    L[1].assign(n, 0);

    dfs( 0, T );
    long long max_sum = max(L[0][0], L[1][0]);
    cout << max_sum << endl;
    cout << 1 << endl;
    cout << 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base13/50
1Hibás válasz0/01ms316 KiB
2Hibás válasz0/02ms316 KiB
3Részben helyes2/41ms316 KiB
4Részben helyes2/41ms316 KiB
5Részben helyes2/41ms316 KiB
6Részben helyes2/41ms316 KiB
7Részben helyes2/437ms3380 KiB
8Részben helyes3/648ms4160 KiB
9Hibás válasz0/654ms4660 KiB
10Hibás válasz0/668ms5428 KiB
11Hibás válasz0/685ms5980 KiB
12Hibás válasz0/6100ms6568 KiB