0pts求调dfs序做法
查看原帖
0pts求调dfs序做法
562569
kingho11楼主2024/8/11 20:14
#include<bits/stdc++.h>
using namespace std;
const int N=305;
vector <int> v[N];
int n,m,a[N],squ[N],top=-1,siz[N],dp[N][N];
void dfs(int u)
{ 
	squ[++top]=u;
	siz[u]=1;
	if(!v[u].size())
	{
		return ;
	}
	for(int i=0;i<v[u].size();i++)
	{
		dfs(v[u][i]);
		siz[u]+=siz[v[u][i]];
	}
}
int main()
{
	cin>>n>>m;
	m++;
	for(int i=1;i<=n;i++)
	{
		int k;
		cin>>k>>a[i];
		v[k].push_back(i);
	}
	dfs(0);
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<m;j++)
		{
			dp[i+1][j+1]=max(dp[i][j]+a[i],dp[i+1][j+1]);
			dp[i+siz[i]-1][j]=max(dp[i][j],dp[i+siz[i]-1][j]);
		}
	}
	cout<<dp[n][m];
}
2024/8/11 20:14
加载中...