社区讨论

蒟蒻求助0pts

P2015二叉苹果树参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo8bfch2
此快照首次捕获于
2023/10/27 15:52
2 年前
此快照最后确认于
2023/10/27 15:52
2 年前
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...