195052025-12-11 18:28:47KristófTevefarmcpp17Hibás válasz 25/50120ms10024 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
vector<int> w;
vector<vector<int>> graph;
vector<vector<long long>> dp;
void solve(int s)
{
if(graph[s].size()==0)
    {
    dp[s][0]=0;
    dp[s][1]=w[s];
    return ;
    }
int sum=0;
dp[s][1]=w[s];
for(auto x : graph[s])
    {
    solve(x);
    dp[s][0]+=max(dp[x][0],dp[x][1]);
    //cout<<x<<" "<<dp[x][0]<<" "<<dp[x][1]<<endl;
    }
}

int main()
{
    int n;
    cin>>n;
    w.resize(n+1);
    for(int i=1;i<=n;i++)cin>>w[i];
    //cout<<w[8]<<endl;
    graph.resize(n+1);
    dp.resize(n+1,vector<long long>(2));
    int x;
    for(int i=2;i<=n;i++)
        {
        cin>>x;
        graph[x].push_back(i);
        }
    solve(1);
    cout<<max(dp[1][0],dp[1][1]);
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base25/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/42ms508 KiB
7Részben helyes2/443ms5212 KiB
8Részben helyes3/654ms6284 KiB
9Részben helyes3/667ms7148 KiB
10Részben helyes3/674ms8160 KiB
11Részben helyes3/697ms9012 KiB
12Részben helyes3/6120ms10024 KiB