题目大意:
  有一棵n个结点的树,每个点都有一个权值,你要从中选出不超过k+1个点使得权值和尽量大。
  同时要注意如果一个点被选择,那么它的子树和这个点到根结点路径上的点不能被选择。

思路:
  很水的树形DP。
  f[i][j]表示以i为根的子树中选择了j个点的最大权值和。
  状态转移方程f[par[i]][k]=max{f[par[i]][k]+f[i][j]};
  转移的时候可能会被覆盖掉,因此用一个临时数组g来保存。
  for的时候不能for满,不然就变成O(nk^2)的了,只有60分。
  数组可能会开不下,要用vector。

 #include<cstdio>
#include<cctype>
#include<vector>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
int par[N],w[N],size[N];
std::vector<std::vector<int64> > f;
std::vector<int64> g;
int main() {
const int n=getint(),k=getint()+;
for(register int i=;i<=n;i++) {
par[i]=getint(),w[i]=getint();
}
f.resize(n+);
g.resize(k+);
for(register int i=;i<=n;i++) size[i]=;
for(register int i=n;i>;i--) {
size[par[i]]+=size[i];
if(f[i].empty()) f[i].resize(k+);
if(f[par[i]].empty()) f[par[i]].resize(k+);
g=f[par[i]];
f[i][]=std::max(f[i][],(int64)w[i]);
for(register int j=;j<=std::min(size[i],k);j++) {
for(register int l=;l<=std::min(size[par[i]],k)-j;l++) {
g[l+j]=std::max(g[l+j],f[par[i]][l]+f[i][j]);
}
}
f[par[i]]=g;
f[i].clear();
}
int64 ans=;
for(register int i=;i<=k;i++) ans=std::max(ans,f[][i]);
printf("%lld\n",ans);
return ;
}

[JZOJ5426]摘Galo的更多相关文章

  1. 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)

    树上背包 这应该是一道树上背包裸题吧. 众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的. 但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做 ...

  2. 【摘选引用】在安全的SQL 密码也不过如此

    SQL密码再安全也禁不住破解!!! http://www.sqlservercentral.com/articles/password+cracking/96540/ 备注:[摘选引用]是本人日常收集 ...

  3. OpenJudge2728:摘花生 解题报告

    2728:摘花生 总时间限制:  1000ms 内存限制: 65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南 ...

  4. 避开unity的坑(转摘)

    避开unity的坑(转摘) 以下总结一部分来自经验之谈,一部分来自其他人的分享.总的来讲,unity开发原型和效果.验证想法,确实是无比便利.可能一个月就把核心玩法做得差不多.强大的编辑器功能让我们也 ...

  5. opencv提取截获图像(总结摘来)

    opencv提取截获图像(总结摘来) http://blog.csdn.net/wuxiaoyao12/article/details/7305865 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  6. C++ 迭代器介绍 [转摘]

    转摘地址为:http://blog.chinaunix.net/uid-20773165-id-1847758.html 迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭 ...

  7. C#里partial关键字的作用(转摘)

    C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...

  8. 图解SQL的Join(转摘)

    转摘网址:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的 ...

  9. html5离线应用详摘

    html5离线应用详摘 在html文件里配置如下: <html manifest=”name.manifest”> 在name.manifest文件里配置如下: CACHE MANIFES ...

随机推荐

  1. Python3 PyPAML 模块(配置文件的操作)

    YAML 是专门用来写配置文件的语言,非常简洁和强大 它的基本语法规则如下: 1.大小写敏感 2.使用缩进表示层级关系 3.缩进时不允许使用Tab键,只允许使用空格. 4.缩进的空格数目不重要,只要相 ...

  2. python实战===老司机奇技淫巧系列之字符转换成图片

    先放两张效果图:

  3. 阿里云ECS的使用

    一.阿里云ECS的使用 1.Linux CentOS Ubuntu Readhat 2.远程登录 xshell 远程登录 winScp 远程文件操作 3.Linux命令 cd 目录名 ls . ls ...

  4. python安装基础

    . python安装 //先查看是否存在python的包,如果没有,那可以用yum或去python的官网安装 [root@localhost ~]# rpm -qa|grep python pytho ...

  5. dubbo支持的远程调用方式

    dubbo RPC(二进制序列化 + tcp协议).http invoker(二进制序列化 + http协议,至少在开源版本没发现对文本序列化的支持).hessian(二进制序列化 + http协议) ...

  6. FineReport——登录不到决策系统

    在不断的测试过程中,可能会造成缓存数据的累积,所以在登录过程中可能会出现登录不到决策系统,而是跳转到某一模板页面 解决方法就是清理缓存或者换一个浏览器测试.

  7. RabbitMQ 实践及使用

    目录 - 1. RabbitMQ的安装    - 1.1 配置好 epel    - 1.2 安装 RPM包    - 1.3 创建用户设置权限- 2. RabbitMQ组件- 3. RabbitMQ ...

  8. 从Java Future到Guava ListenableFuture实现异步调用

    原文地址: http://blog.csdn.net/pistolove/article/details/51232004 Java Future     通过Executors可以创建不同类似的线程 ...

  9. chain模块将两个列表合并

    示例代码 from itertools import chain v1 = [11,22,33] v2 = ['a','b','c'] for item in chain(v1,v2): print( ...

  10. 【JBPM4】判断节点decision 方法1

    JPDL <?xml version="1.0" encoding="UTF-8"?> <process key="decision ...