蒟蒻背包树形dp样例没过求调
查看原帖
蒟蒻背包树形dp样例没过求调
1250354
CP_2309楼主2024/7/17 08:20
#include<bits/stdc++.h>
#define N 305
using namespace std;
struct node
{
	int to,nex;
}e[N*4];
int n,q,cnt,dis[N];
int head[N],in[N],dp[N][N],a[N],siz[N];
bool vis[N];
inline void add(int x,int y)
{
	e[++cnt].to=y;
	e[cnt].nex=head[x];
	head[x]=cnt;
}
inline void dfs(int x,int fa)
{
    for (int i=head[x];i;i=e[i].nex)
    {
        int y=e[i].to;
        if (y==fa) continue;
        dfs(y,x);
        for (int j=1;j<=q;++j)
        {
            for (int k=1;k<=j;++k)
            {
                dp[x][j]=max(dp[x][j],dp[y][j-k]+dp[x][k]);
            }
        }
    }
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin >> n >> q;
	for (int i=1;i<=n;++i)
	{
		int x;
		cin >> x >> a[i];
		dp[i][1]=a[i];
        dp[i][0]=0;
		add(x,i);
	}
    dfs(0,-1); 
    cout << dp[1][q];
	return 0;
}
2024/7/17 08:20
加载中...