Submission #1057096

#TimeUsernameProblemLanguageResultExecution timeMemory
10570960npataJobs (BOI24_jobs)C++17
0 / 100
1 ms860 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define vec vector

const int MXN = 2'005;

vec<int> tree[MXN];
map<int, int> thr[MXN];
int x[MXN];

void dfs(int u) {
	map<int, int> ch_thrs;
	for(int v : tree[u]) {
		dfs(v);
		for(auto [t, g] : thr[v]) {
			ch_thrs[t] += g;
		}
	}

	int money = x[u];
	int total_gain = x[u];
	int extra = 0;

	if(total_gain > 0) thr[u][extra] = total_gain;
	for(auto [t, g] : ch_thrs) {
		if(money >= t) {
			money += g;
			total_gain += g;
		}
		else {
			if(total_gain > 0) total_gain = 0;
			extra += t-money;
			money = t;
			total_gain += g;
			money += g;
		}
		if(total_gain > 0) thr[u][extra] = total_gain;
	}
}

int32_t main() {
	ios_base::sync_with_stdio(false);

	int N, S;
	cin >> N >> S;
	N += 1;

	x[0] = S;

	for(int i = 1; i<N; i++) {
		cin >> x[i];
		int p;
		cin >> p;
		tree[p].push_back(i);
	}

	//cerr << "INPUT READ" << '\n';
	dfs(0);

	cout << thr[0][0]-S << '\n';
}
#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...