请求加强数据
查看原帖
请求加强数据
592126
13402805827wuaiyang楼主2023/3/22 17:36

这份代码没有过样例,原因是没有初始化siz[0],但是AC了

#include <bits/stdc++.h>
using namespace std;
int n,m,s[305],k[305],d[305],sta[305],sp,f[305][305],siz[305],ans;
int main(){
	scanf("%d%d",&n,&m);
	m++;
	for(int i=1;i<=n;i++) scanf("%d%d",&k[i],&s[i]),d[k[i]]++,f[i][1]=s[i],siz[i]=1;
	for(int i=1;i<=n;i++) if(!d[i]) sta[sp++]=i;
	while(sp){
		int ls=sta[--sp];
		if(ls==0) break;
		siz[k[ls]]+=siz[ls];
		for(int i=min(m,siz[k[ls]]);i>=1;i--)
			for(int j=min(m,min(siz[ls],i-1));j>=1;j--){
				f[k[ls]][i]=max(f[k[ls]][i],f[k[ls]][i-j]+f[ls][j]);
			}
				
		d[k[ls]]-=1;
		if(!d[k[ls]]) sta[sp++]=k[ls];
	}
	for(int i=1;i<=m;i++) ans=max(ans,f[0][i]);
	printf("%d\n",ans);
	return 0;
}
2023/3/22 17:36
加载中...