#include <bits/stdc++.h>
using namespace std;
const int MAXN=100000;
vector<int> adj[MAXN];
map<long long, long long> dp[MAXN];
pair<int,int> fruit[MAXN];
void dfs(int u){
for(auto v:adj[u]){
dfs(v);
if(dp[u].size()<dp[v].size()){
swap(dp[u], dp[v]);
}
for(auto [key, value]:dp[v]){
dp[u][key]+=value;
}
}
auto [time, sum]=fruit[u];
if(time!=0){
dp[u][time]+=sum;
while(true){
auto it=dp[u].upper_bound(time);
if(it==dp[u].end())break;
if(it->second<=sum){
sum-=it->second;
dp[u].erase(it);
}else{
dp[u][it->first]-=sum;
break;
}
}
}
}
int main(){
int n,m,k;cin>>n>>m>>k;
for(int i=1;i<n;i++){
int pi;cin>>pi;
pi--;
adj[pi].push_back(i);
}
for(int i=0;i<m;i++){
int v,d,w;cin>>v>>d>>w;
v--;
fruit[v]={d,w};
}
dfs(0);
long long ans=0;
for(auto [time, value]:dp[0]){
ans+=value;
}
cout<<ans<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |