Submission #1267019

#TimeUsernameProblemLanguageResultExecution timeMemory
1267019random_user29Magic Tree (CEOI19_magictree)C++20
3 / 100
95 ms29252 KiB
//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 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...