16分求调
查看原帖
16分求调
1379252
DJK227411楼主2024/10/22 19:48
#include<bits/stdc++.h>
using namespace std;
struct egdm{
    int to,next,m,u;
}e[100005];
int head[100005],tot,dp[205][205],n,q;;
void add(int x,int y,int z){
    e[++tot].next=head[x];
    e[tot].to=y;
    e[tot].u=x;
    e[tot].m=z;
    head[x]=tot;
}
void dfs(int son,int fa){
    for(int i=head[son];i!=0;i=e[i].next){
        int v=e[i].to;
        dp[v][1]=e[i].m;
        if(v==fa)continue;
        dfs(v,son);
        for(int j=q;j>=1;j--){
            for(int k=0;k<=j;k++){
                if((k!=j&&j!=1)||son==1)dp[son][j]=max(dp[son][j],dp[son][k]+dp[son][j-k]);
            }
        }    
    }
}
int main(){
    cin>>n>>q;
    for(int i=1;i<n;i++){
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
        add(b,a,c);
    }
    dfs(1,0);
    cout<<dp[1][q];
    return 0;
}
2024/10/22 19:48
加载中...