蒟蒻求助0pts
查看原帖
蒟蒻求助0pts
433896
phi_93楼主2022/8/11 21:33
#include <stdio.h>
#include <algorithm>
using namespace std;
struct edge{
    int to,next;
    int val;
}e[105];
int ecnt,head[105];
void addedge(int from,int to,int val){
    e[++ecnt]=(edge){to,head[from],val};
    head[from]=ecnt;
}
int n,q;
int dp[105][105];
int siz[105];
void dfs(int x,int father){
    for(int i=head[x];i;i=e[i].next){
        int to=e[i].to;
        if(to==father)continue;
        dfs(to,x);
        siz[x]+=siz[to]+1;
    }
    for(int i=head[x];i;i=e[i].next){
        int to=e[i].to;
        if(to==father)continue;
        for(int j=siz[x];j;j--){
            for(int k=min(siz[to],j-1);k;k--){
                dp[x][j]=max(dp[x][j],dp[x][j-1-k]+dp[to][k]+e[i].val);
            }
        }
    }
}
int main(){
    scanf("%d %d",&n,&q);
    while(--n){
        int from,to,val;
        scanf("%d %d %d",&from,&to,&val);
        addedge(from,to,val);
        addedge(to,from,val);
    }
    dfs(1,-1);
    printf("%d",dp[1][q]);
    return 0;
}

2022/8/11 21:33
加载中...