记录编号 45043 评测结果 AAAAAAAAAA
题目名称 [郑州101中学] 圣战 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 1.438 s
提交时间 2012-10-22 07:48:21 内存使用 22.82 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;

int val[10010],sonnum[10010],f[10010][510];
vector<int> son[10010];

int maxint(int a,int b)
{
    if (a>b)
        return(a);
    return(b);
}

void fillit(int pos,int limit)
{
	int i,j,k;
	for (i=0;i<sonnum[pos];i++)
	{
		fillit(son[pos][i],limit-1);
		for (j=limit-1;j>=1;j--)
		{
			for (k=1;k<=j;k++)
			{
				f[pos][j]=maxint(f[pos][j],f[pos][j-k]+f[son[pos][i]][k]);
			}
		}
	}
	for (i=limit;i>=1;i--)
		f[pos][i]=f[pos][i-1]+val[pos];
}

int main(void)
{
    freopen("charge.in","r",stdin);
    freopen("charge.out","w",stdout);
    int i,n,lim,temp;
    cin>>n>>lim;
    val[0]=40000000;
    for (i=1;i<=n;i++)
    {
        cin>>temp>>val[i];
        sonnum[temp]++;
        son[temp].push_back(i);
    }
    fillit(0,lim);
    cout<<f[0][lim]<<endl;
    return(0);
}