//In The Name Of God
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int , int> pii;
typedef pair<ll , ll> pll;
#define pb push_back
#define endl '\n'
#define test(x) cout<<x,exit(0)
#define fast (ios_base::sync_with_stdio(false), cin.tie(NULL));
const int maxn=1e5+10;
multiset<pii>st[maxn];
vector<int>adj[maxn];
int inp[maxn][2];
int sz[maxn];
void dfs(int v){
sz[v]=1;
if(adj[v].size()==1 and inp[v][0]!=0){
st[v].insert({inp[v][0],inp[v][1]});
return;
}
int mx=-1;
int who=0;
for(int i=0;i<adj[v].size();i++){
dfs(adj[v][i]);
sz[v]+=sz[adj[v][i]];
if(sz[adj[v][i]]>mx){
mx=sz[adj[v][i]];
who=adj[v][i];
}
}
for(int i=0;i<adj[v].size();i++){
if(adj[v][i]==who){
continue;
}
for(auto it=st[adj[v][i]].begin();it!=st[adj[v][i]].end();it++){
st[who].insert(*it);
}
}
swap(st[who],st[v]);
if(inp[v][0]!=0){
st[v].insert({inp[v][0],inp[v][1]});
if(st[v].rbegin()->first>inp[v][0]){
auto it=st[v].lower_bound({inp[v][0]+1,0});
int val1=it->first;
int val2=it->second;
st[v].erase(it);
st[v].insert({val1,val2-inp[v][1]});
}
}
}
int main(){
fast;
int n;cin>>n;
int m,k;cin>>m>>k;
for(int i=2;i<=n;i++){
int p;cin>>p;
adj[p].pb(i);
}
for(int i=1;i<=m;i++){
int v,d,w;cin>>v>>d>>w;
inp[v][0]=d;
inp[v][1]=w;
}
dfs(1);
ll ans=0;
for(auto it=st[1].begin();it!=st[1].end();it++){
ans+=it->second;
}
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... |