神奇的错误???
查看原帖
神奇的错误???
379758
晨曦时雨楼主2021/8/23 16:24

错误代码——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

本蒟蒻表示挺神奇的

2021/8/23 16:24
加载中...