제출 #990490

#제출 시각아이디문제언어결과실행 시간메모리
990490parlimoosMagic Tree (CEOI19_magictree)C++14
3 / 100
26 ms10052 KiB
//Be Name KHODA
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
#define pb push_back
#define pp pop_back
#define lb lower_bound
#define ub upper_bound
#define cl clear
#define bg begin
#define arr(x) array<int , x>
#define endl '\n'\

int n , m , k;
vector<int> tr[100000];
ll frt[100000][2] , dp[100000][2];

void dfs(int v = 0){
    dp[v][1] = frt[v][1];
    for(int u : tr[v]){
        dfs(u);
        dp[v][0] += max(dp[u][0] , dp[u][1]);
        if(frt[v][0] >= frt[u][0]) dp[v][1] += max(dp[u][0] , dp[u][1]);
        else dp[v][1] += dp[u][0];
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m >> k;
    for(int i = 1 ; i < n ; i++){
        int d;
        cin >> d;
        tr[d - 1].pb(i);
    }
    for(int i = 0 ; i < m ; i++){
        int v;
        cin >> v;
        cin >> frt[v - 1][0] >> frt[v - 1][1];
    }
    dfs();
    cout << dp[0][0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...