萌新刚学 Dp,40 pts 求助
查看原帖
萌新刚学 Dp,40 pts 求助
414386
Isshiki·Iroha楼主2021/10/7 15:23

快读快输不上了

/*
	Name: Class
	Copyright: CTSC1997
	Author: Isshiki Iroha
	Date: 07/10/21 15:09
	Description: Dp on Tree
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=805;
int n,m;
int Size[maxn];
int head[maxn],tot;
struct node{
    int v,nxt;
}kano[maxn<<2];
inline void add_kano(int u,int v){
    ++tot;
    kano[tot].nxt=head[u];
    kano[tot].v=v;
    head[u]=tot;
}
int score[maxn];
int f[maxn][maxn];
void dp(int u){
    for(int i(head[u]);i;i=kano[i].nxt){
        int v=kano[i].v;
        dp(v);
        Size[u]+=Size[v];
        int dp1=min(Size[u],m);
        for(int j(dp1);j>=1;--j){
            int dp2=min(j-1,Size[v]+100000);
            for(int k(0);k<=dp2;++k){
                f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]);
            }
        }
    }
}
int main() {
    read(n,m);
    for(int i(1),s;i<=n;++i){
        read(s,score[i]);
        f[i][1]=score[i];
        add_kano(s,i);
    }
    memset(Size,1,sizeof Size);
	++m;
    dp(0);
    write(f[0][m]);
    return 0;
}

2021/10/7 15:23
加载中...