2017年10月30日提高组T2 摘Galo

Description

0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO。
这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w[i]。
OvO发现,如果她摘下了i号Galo,那么i的子树中的Galo以及i到根的路径上的其他Galo都会死掉。
OvO的袋子只能装k个Galo,她的嘴巴里还能叼1个,请问她所摘Galo的美味度之和的最大值是多少?

Input

第一行两个正整数n,k。
第二行到第n行,第i行两个正整数f[i],w[i],表示i号点的父亲为f[i] (保证x[i]

Output

一行一个非负整数,为最大美味值。

Sample Input

4 1
1 10
2 3
2 6
Sample Output

10
Hint

30% n,k<=200
30% n*k*k<=10^7
40% n*k<=10^7
对于所有数据,n,k,w[i]<=10^5

分析:题目对取 Galo 的要求,即不能同时取一对祖先和子孙。我们可 以在 DFS 序上 DP。对于选择取 Galo[i]的决策,即选择了 DFS 序上 i 号节点的子树所对应的区间。只要选择的区间不相交、不重复,则 是一个合法的取法。这样,题目就成了一个区间覆盖 DP 问题,复 杂度 O(n*k)。

代码

#include <cstdio>
#define N 100005
using namespace std;struct arr
{int to,nxt;
}p[N];int f[N][105],a[N],ls[N],dfn[N],w[N],size[N];
int n,k,l;
bool v[N];void add(int x,int y)
{p[++l].to=y;p[l].nxt=ls[x];ls[x]=l;
}int max(int x,int y)
{return x>y?x:y;
}void dfs(int x)
{size[x]=1;dfn[++l]=x;for (int i=ls[x];i;i=p[i].nxt)if (!v[p[i].to]){v[p[i].to]=true;dfs(p[i].to);size[x]+=size[p[i].to];}
}int main()
{
//  freopen("galo.in","r",stdin);
//  freopen("galo.out","w",stdout);scanf("%d%d",&n,&k);k++;for (int i=2;i<=n;i++){int x,y;scanf("%d%d",&x,&w[i]);add(x,i);}l=0;dfs(1);for (int i=n;i>=1;i--)for (int j=1;j<=k;j++)f[dfn[i]][j]=max(f[dfn[i+size[dfn[i]]]][j-1]+w[dfn[i]],f[dfn[i+1]][j]);int ans=0;for (int i=0;i<=k;i++)ans=max(ans,f[1][i]);printf("%d",ans);
}

SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)相关推荐

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

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

  2. 【SSLGZ 2812】2017年10月30日提高组T2 凤凰院真凶

    问题描述 输入 输出 第一行一个整数k,表示最长公共合法事件序列的长度. 样例输入 5 1 4 2 5 1 4 1 1 2 4 样例输出 2 数据范围 算法讨论 f[i][j]为a到第i个位置,b到第 ...

  3. SSL2793 2017年10月26日提高组T2 Deep(博弈)

    2017年10月26日提高组T2 Deep Description 失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们. 然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶 ...

  4. 2017年10月23日提高组T2 灵知的太阳信仰 单调队列优化dp

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  5. 2020年10月30日提高组 B 超级蚯蚓

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

  6. 2020年10月30日提高组 C 大鱼吃小鱼

    文章目录 R e s u l t Result Result H y p e r l i n k Hyperlink Hyperlink D e s c r i p t i o n Descripti ...

  7. 2020年10月30日提高组 A 大鱼吃小鱼

    文章目录 R e s u l t Result Result H y p e r l i n k Hyperlink Hyperlink D e s c r i p t i o n Descripti ...

  8. 2018年10月18日提高组 T3 摘果子

    大意 在选择一个东西前必须要选择另一样东西,选择一样东西可以获得一定的价值,但需要花费一定的代价. 求代价 ≤ m \leq m ≤m的最大价值 思路 有依赖性的背包问题(树形背包问题) 套模板(选课 ...

  9. SSL2668 2017年8月7日提高组T1 根(dfs)

    2017年8月7日提高组T1 根 Description 一天,小B得到了一棵n个节点的树.无聊至极的小B想要找出一个点,使得以这个点为根时,所有点的深度之和最大.但小B打开手机,发现他最爱的re:c ...

最新文章

  1. GARFIELD@01-18-2005
  2. mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置
  3. 网络系统工程师的最终归宿(一)创业还是打工
  4. 吴恩达登录知乎,亲自回答如何系统学习机器学习
  5. 流浪不是我的初衷 ... ...
  6. Python--协程(gevent模块)
  7. dubbo web工程示例_分布式开发-Zooker+dubbo入门-Demo
  8. java list 交集_java两个List的交集,并集
  9. Linux下的C++ socket编程实例
  10. 跨库事务处理 spring+hibernate+struts2+jta
  11. Service Worker 全面进阶
  12. 苹果计算机 win10,图文教程!苹果电脑和WIN10的完美融合井井有条的美
  13. 怎样自动关闭计算机,如何设置电脑自动关机,教您电脑怎样设置自动关机
  14. iphone 计算文件长度
  15. js 迅雷 批量下载
  16. Xcode 模拟器(Simulator)进行录屏,保存成mp4格式
  17. 杰理之微信语音前2S声音小修改【篇】
  18. 华为鸿蒙支持APP,华为 WATCH 3 已到线下店:预装鸿蒙 HarmonyOS 2,支持安装 App
  19. 新闻发布系统-用户登录.模糊分页查询
  20. 如何修改本机host地址

热门文章

  1. 不确定性的人生,其实是有确定性的东西
  2. html制作windows 10,Windows 10迎来Alpha版HTML编辑器应用
  3. STM32F030C8T6 IAP 开发记录
  4. 形容计算机专业好句子,形容专业水平高的词句
  5. 42个自我提升的实用技巧
  6. 2种RamDisk的读写速度
  7. python根据excel生成报表_python生成Excel图表(通过xlsxwriter)
  8. Word制作毕业论文技巧实例--转载
  9. 如何检测计算机性能 具体步骤,如何测试电脑性能
  10. 【论文笔记】SeqSLAM、Fast-SeqSLAM 和 Bow、Incremental Bow、DBoW2、ORB-SLAM 论文阅读笔记