错误代码——20分
#include<iostream>
using namespace std;
const int N=2010;
int n,m,tot=0;
int f[N][N],head[N];
struct node{
int nxt,to;
}lu[N*2];
void add(int u,int v)
{
lu[tot].to=v;
lu[tot].nxt=head[u];
head[u]=tot;
tot++;//
}
void dfs(int p)
{
for(int i=head[p];i;i=lu[i].nxt)
{
int to=lu[i].to;
dfs(to);
for(int j=m+1;j>=1;j--)
{
for(int k=0;k<j;k++)
{
f[p][j]=max(f[p][j],f[p][j-k]+f[to][k]);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int u;
cin>>u;
cin>>f[i][1];
add(u,i);
}
dfs(0);
cout<<f[0][m+1];
return 0;
}
AC代码——100分
#include<iostream>
using namespace std;
const int N=2010;
int n,m,tot=0;
int f[N][N],head[N];
struct node{
int nxt,to;
}lu[N*2];
void add(int u,int v)
{
tot++;//
lu[tot].to=v;
lu[tot].nxt=head[u];
head[u]=tot;
}
void dfs(int p)
{
for(int i=head[p];i;i=lu[i].nxt)
{
int to=lu[i].to;
dfs(to);
for(int j=m+1;j>=1;j--)
{
for(int k=0;k<j;k++)
{
f[p][j]=max(f[p][j],f[p][j-k]+f[to][k]);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int u;
cin>>u;
cin>>f[i][1];
add(u,i);
}
dfs(0);
cout<<f[0][m+1];
return 0;
}
不一样的地方我用//标出来了,有哪个dalao能看一下为什么会这样吗QAQ
本蒟蒻表示挺神奇的