Submission #1180902

#TimeUsernameProblemLanguageResultExecution timeMemory
1180902KK_1729Worst Reporter 4 (JOI21_worst_reporter4)C++20
79 / 100
359 ms116756 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define all(a) a.begin(), a.end()
#define endl "\n"

void printVector(vector<int> a){
	for (auto x: a) cout << x << " ";
	cout << endl;
}
vector<vector<int>> graph;
vector<int> C;
vector<int> H;
vector<map<int, int>> dp;
void dfs(int x){

	
	dp[x][0] = C[x];
	dp[x][H[x]] = -C[x];
	dp[x][H[x]+1] = C[x];
	for (int &i: graph[x]){
		dfs(i);
		if (dp[x].size() < dp[i].size()) swap(dp[x], dp[i]);
		for (auto [a, b]: dp[i]){
			dp[x][a] += b;
			if (dp[x][a] == 0) dp[x].erase(a);
		}
	}
	auto iter = dp[x].find(H[x]);
		while (iter != dp[x].end()){
			if (iter->second > 0) break;
			int val = iter->second;
			iter = dp[x].erase(iter);iter--;
			iter->second += val;
	}
}
void solve(){
	int n; cin >> n;
	dp.resize(n+1);
	graph.resize(n+1);
	C.resize(n+1);
	H.resize(n+1);
	FOR(i,1,n+1){


		int a, h, c; cin >> a >> h >> c;
		if (i > 1) graph[a].pb(i);
		C[i] = c;
		H[i] = h;
	}

	dfs(1);
	// printVector(C);
	cout << dp[1][0] << endl;
}


int32_t main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);
	int t = 1; // cin >> t;
	while (t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...