记录编号 128380 评测结果 AAAAAAAAAA
题目名称 [郑州101中学] 圣战 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 C++ 运行时间 1.030 s
提交时间 2014-10-17 15:53:16 内存使用 51.07 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int i,n,m,zj1,zj2,s[10010]={0},fff[10001][501]={0},tree[10001][901]={0},l[10010]={0},r[10010]={0};
void Build(int fa)
{
	if(!tree[fa][0]) return;
	l[fa]=tree[fa][1];
	Build(l[fa]);
	int h=l[fa];
	for(int x=2;x<=tree[fa][0];x++)
	{
		r[h]=tree[fa][x];
		h=r[h];
		Build(h);
	}
}
void init()
{
	scanf("%d%d",&m,&n);
	m++;
	for(i=2;i<=m;i++)
	{
		scanf("%d%d",&zj1,&s[i]);
		zj1++;
		tree[zj1][0]++;
		tree[zj1][ tree[zj1][0] ]=i;
	}
}
void Tree_DP(int fa)
{
	if(l[fa])Tree_DP(l[fa]);
	if(r[fa])Tree_DP(r[fa]);
	int h,x;
	for(int z=1;z<=n;z++)
	{
		fff[fa][z]=fff[r[fa]][z];
		for(x=0;x<z;x++)
		{
			h=fff[l[fa]][x]+fff[r[fa]][z-x-1]+s[fa];
			if(fff[fa][z]<h)fff[fa][z]=h;
		}
	}
}
void PRINT()
{
	fff[1][n]+=40000000;
	int k=fff[1][n];
	printf("%d\n",k);
}
int main()
{
	freopen("charge.in","r",stdin);
	freopen("charge.out","w",stdout);
	init();//get
	Build(1);//get
	Tree_DP(1);
	PRINT();
	return 0;
	fclose(stdin);
	fclose(stdout);
}