16pts悬关
查看原帖
16pts悬关
351679
shaun2000楼主2024/7/8 18:14

record

#include<bits/stdc++.h>
int son[105][2];
int val[105][2];int n,q;
int f[105][105];
void dfs(int u,int la){
    bool flag=true;
    for(int I=0;I<=1;I++)
    {
        if(son[u][I]==la)
            continue;
        flag=false;
        dfs(son[u][I],u);
    }
    if(flag)
        return;
    for(int i=1;i<=q;i++)
    {
        for(int j=0;j<=i;j++)
        {
            int tmp=0;
            if(j!=0)
                tmp+=val[u][0];
            if(i-j>=1)
                tmp+=val[u][1];
            if(tmp+f[son[u][0]][j]+f[son[u][1]][i-j]>f[u][j])
                f[u][j]=tmp+f[son[u][0]][j]+f[son[u][1]][i-j];

        }
    }

}
int main()
{

    scanf("%d%d",&n,&q);
    for(int i=1;i<n;i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(son[a][0])
        {
            son[a][1]=b;
            val[a][1]=c;
        }
        else
        {
            son[a][0]=b;val[a][0]=c;
        }


        if(son[b][0])
        {
            son[b][1]=a;
            val[b][0]=c;
        }
        else
        {
            son[b][0]=a;val[b][0]=c;
        }

    }
    dfs(1,0);
    printf("%d",f[1][q]);
    return 0;
}
2024/7/8 18:14
加载中...