Submission #249252

#TimeUsernameProblemLanguageResultExecution timeMemory
249252sahil_kFireworks (APIO16_fireworks)C++14
19 / 100
20 ms1024 KiB
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int n, m;
vector< pair<int, int> > adj[310];
long long dp[310][310];
void dfs (int x) {
	if (adj[x].size() == 0) {
		dp[x][0] = 0;
		for (int i=1; i<=300; i++) {
			dp[x][i] = 1e16;
		}
		return;
	}
	for (auto i: adj[x]) {
		dfs(i.first);
	}
	for (int i=0; i<=300; i++) {
		for (auto j: adj[x]) {
			long long best = 1e16;
			for (int k=0; k<=i; k++) {
				best = min(best, dp[j.first][k]+abs(i-k-j.second));
			}
			dp[x][i] += best;
		}
	}
}
int main () {
	cin >> n >> m;
	int pi, wi;
	for (int i=2; i<=n+m; i++) {
		cin >> pi >> wi;
		adj[pi].push_back({i, wi});
	}
	dfs(1);
	long long o = 1e16;
	for (int i=0; i<=300; i++) {
		o = min(o, dp[1][i]);
	}
	cout << o << 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...