题面
裸的树型背包。f[i][j]表示i的子树中选了j个的最优值。
O(n*k^2)+常数优化代码:

#include<iostream>
#include<cstdio>
#define chkmax(a,b) a=max(a,b)
#define ll long long
using namespace std;
const int maxn=100010;
int n,k,w[maxn],sz[maxn];
ll f[10010][1010];
struct edge
{int t;edge *next;
}*con[maxn];
void ins(int x,int y)
{edge *p=new edge;p->t=y;p->next=con[x];con[x]=p;
}
void dp(int v)
{for(int i=k+1;i>0;i--)f[v][i]=-1e18;for(edge *p=con[v];p;p=p->next){dp(p->t);sz[v]+=sz[p->t];for(int i=min(sz[v],k+1);i>=0;i--)for(int j=0;j<=min(i,sz[p->t]);j++)chkmax(f[v][i],f[v][i-j]+f[p->t][j]);}if(con[v]==NULL) sz[v]=1;chkmax(f[v][1],(ll)w[v]);
}
int main()
{scanf("%d%d",&n,&k);for(int i=2;i<=n;i++){int fa;scanf("%d%d",&fa,&w[i]);ins(fa,i);}dp(1);ll ans=0;for(int i=0;i<=k+1;i++)chkmax(ans,f[1][i]);printf("%lld",ans); return 0;
}

O(n*k)DFS序做法:

#include<iostream>
#include<cstdio>
#define chkmax(a,b) a=max(a,b)
#define ll long long
using namespace std;
const int maxn=100010;
int n,k,w[maxn],sz[maxn],tim,dfn[maxn];
ll f[10010][1010];
struct edge
{int t;edge *next;
}*con[maxn];
void ins(int x,int y)
{edge *p=new edge;p->t=y;p->next=con[x];con[x]=p;
}
void dfs(int v)
{dfn[++tim]=v;sz[v]=1;for(edge *p=con[v];p;p=p->next){dfs(p->t);sz[v]+=sz[p->t];}
}
int main()
{scanf("%d%d",&n,&k);k++;for(int i=2;i<=n;i++){int fa;scanf("%d%d",&fa,&w[i]);ins(fa,i);}dfs(1);for(int i=n;i>=1;i--)for(int j=1;j<=k;j++)   f[dfn[i]][j]=max(f[dfn[i+sz[dfn[i]]]][j-1]+w[dfn[i]],f[dfn[i+1]][j]);ll ans=0;for(int i=0;i<=k;i++)chkmax(ans,f[dfn[1]][i]);printf("%lld",ans); return 0;
}

[2017纪中10-26]摘Galo 树型背包相关推荐

  1. [2017纪中10-25]凤凰院修真 LCIS最长公共上升子序列

    题面 f[i][j]表示a序列考虑到i,b序列考虑到j且b[j]必须选的最长长度. a[i]!=b[j]时,f[i][j]=f[i-1][j]. 那么当a[i]==b[j]时,f[i][j]=max{ ...

  2. [2017纪中10-25]嘟噜噜 约瑟夫问题 递推

    题面 假如n=1,显然留下的1号已经幸存. 假如n< m,我们每次杀掉m%n那个人,然后转化为(n-1,m)的子问题,求出子问题再倒推回来.最多做(n< m<=1e5)次. 假如n& ...

  3. 2019年暑假 纪中培训总结

    前言 这次期末考完估计级排80+80+80+.反正语文.数学.英语.历史.政治.地理都感觉考差了. 结果语文.英语.政治.历史.地理.物理都考得跟shi一样 语文做题时漏了两道题,心态很崩.作文和阅读 ...

  4. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)

    2017年10月30日提高组T2 摘Galo Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有 ...

  5. 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo

    问题描述 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w ...

  6. JZOJ 5426. 【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  7. 纪中国庆10.5做题小结

    纪中国庆10.5做题小结 T1:教主的花园 T2:教主泡嫦娥 T3:保镖排队 T4:教主的别墅 T1:教主的花园 Description [问题背景] LHX教主最近总困扰于前来膜拜他的人太多了,所以 ...

  8. 【NOIP2017提高A组集训10.25】摘Galo (树形dp)

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  9. 【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

最新文章

  1. 关于测试行业的零星思考
  2. 解决 : Shell 脚本 $‘\r‘: command not found 问题
  3. Tensorflow——张量
  4. maven多个子项目、父项目之间的引用问题
  5. mysql error report,ECSHOP网店系统提示MYSQL SERVER ERROR REPORT的解决方法
  6. [CSS揭秘]伪随机背景
  7. 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)
  8. 交通灯程序设计C语言,单片机C语言程序设计:LED 模拟交通灯
  9. ToolsOh第4批收录
  10. 乐优商城(14)–订单服务
  11. 小麦颗粒数目matlab,求关于matlab中rice.png图像中的米粒数目的算法
  12. Aho-Corasick Automaton · AC自动机
  13. 【学习笔记】傅里叶变换: 方形函数,三角函数
  14. DNA分子结构3D模型
  15. 基本表改变视图不改变为什么_为什么说10万本金以下穷人玩股票一般都会赔?不改变穷人思维,还不如退出股市...
  16. 基础数学(八)——期末考试复习
  17. 查看oracle11g的企业管理器(OEM)
  18. 【用户画像】实现宽表合并,pivot概述,源码实现并发布任务
  19. 小时候真傻,居然想着快快长大
  20. 我电脑感染了一种奇怪的病毒,它点中了我的笑穴!

热门文章

  1. 成长的烦恼:如何面对失败常态化的人生
  2. 2019大数据挑战赛TOP5方案总结
  3. 艺赛旗联合创始人胡立军:咨询机构、CIO和用户眼中的RPA「理想型」
  4. 枣庄高新技术企业认定优惠政策,同邦科技分享
  5. 科技创新创业2022年阜阳市高新企业扶持奖补政策新出申报条件材料流程
  6. 数控编程必备神器!Mastercam 2021让你的加工更高效更精准!
  7. 如何言语上更好的激励别人?
  8. Android 语音遥控器的整体分析
  9. JS 判断一个字符串是否为日期格式(兼容IOS)
  10. 设计模式(2)结构型模式