제출 #32008

#제출 시각아이디문제언어결과실행 시간메모리
32008szawinis바이오칩 (IZhO12_biochips)C++14
100 / 100
333 ms402488 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e5+1;

int n, m, x[MAX], ed[MAX], dp[MAX][501];
vector<int> g[MAX], ord;

void dfs(int u) {
	ord.push_back(u);
	for(int v: g[u]) dfs(v);
	ed[u] = ord.size();
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m;
	int root = -1;
	for(int i = 0, p; i < n; i++) {
		cin >> p >> x[i]; --p;
		if(p >= 0) g[p].push_back(i);
		else root = i;
	}
	dfs(root);
	for(int j = 1; j <= m; j++) dp[n][j] = INT_MIN;
	for(int i = n-1; i >= 0; i--) {
		for(int j = 0; j <= m; j++) {
			dp[i][j] = dp[i+1][j];
			if(j) dp[i][j] = max(dp[ed[ord[i]]][j-1] + x[ord[i]], dp[i][j]);
		}
	}
	cout << dp[0][m];
}
#Verdict Execution timeMemoryGrader output
Fetching results...