首页 > 移动平台 > 详细

洛谷P2015 二叉苹果树

时间:2019-11-10 11:22:07      阅读:82      评论:0      收藏:0      [点我收藏+]

树形背包+一点小改动

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 110

using namespace std;

struct node
{
    int ed,len,nxt;
};
node edge[maxn<<1];
int n,m,cnt,first[maxn],dp[maxn][maxn],siz[maxn];

inline void add_edge(int s,int e,int d)
{
    ++cnt;
    edge[cnt].ed=e;
    edge[cnt].len=d;
    edge[cnt].nxt=first[s];
    first[s]=cnt;
    return;
}

inline void dfs(int now,int fa)
{
    for(register int i=first[now];i;i=edge[i].nxt)
    {
        int e=edge[i].ed;
        if(e!=fa)
        {
            dfs(e,now);
            siz[now]=siz[now]+siz[e]+1;
            for(register int j=min(siz[now],m);j>=0;--j)
                for(register int k=min(j-1,siz[e]);k>=0;--k)
                    dp[now][j]=max(dp[now][j],dp[now][j-k-1]+dp[e][k]+edge[i].len);
        }
    }
    return;
}

int main()
{
    scanf("%d%d",&n,&m);
    for(register int i=1;i<=n-1;++i)
    {
        int s,e,d;
        scanf("%d%d%d",&s,&e,&d);
        add_edge(s,e,d);
        add_edge(e,s,d);
    }
    dfs(1,0);
    printf("%d\n",dp[1][m]);
    return 0;
}

 

洛谷P2015 二叉苹果树

原文:https://www.cnblogs.com/Hoyoak/p/11829016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!