Submission #1315722

#TimeUsernameProblemLanguageResultExecution timeMemory
1315722Jawad_Akbar_JJBiochips (IZhO12_biochips)C++20
100 / 100
221 ms6844 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 1<<18;
vector<int> nei[N];
int dp[N][2], ch[N], cur, a[N], mem[N];

void dfs(int u){
	ch[u] = 1;
	for (int i : nei[u])
		dfs(i), ch[u] += ch[i];
	a[++cur] = u;
}

int main(){
	int n, m;
	cin>>n>>m;

	for (int i=1, p;i<=n;i++){
		cin>>p>>mem[i];
		nei[p].push_back(i);
	}

	dfs(nei[0][0]);

	for (int i=0;i<N;i++)
		dp[i][1] = -1e9;

	for (int j=1;j<=m;j++){
		for (int i=1;i<=n;i++)
			dp[i][1] = max(dp[i-1][1], dp[i - ch[a[i]]][0] + mem[a[i]]);
		for (int i=0;i<=n;i++)
			dp[i][0] = dp[i][1], dp[i][1] = -1e9;
	}
	cout<<dp[n][0]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...