‹ 上一题 下一题 ›

g6-09076. 合并的代价账本 未做

1000 ms 256 MB 测试点 10 通过率 50% GESP-66级·树形DP入门复杂度分析阶梯·理解

题目描述

给一棵以 为根、共 个结点的有根树,以及一个容量 。树形背包在把孩子的子树合并进来时,每一步都要付出代价。请你按下面的规则把整棵树的合并代价记成一本账:

  1. 从叶子开始,按后序处理每个结点 (它的所有孩子都先处理完);
  2. 起初的已合并集合只有自己,记当前大小 ;
  3. 把 的孩子按编号从小到大依次合并:合并孩子 时( 的整棵子树此刻已合并成一个大小为 的整体),本次代价为 ;记账后 。

整棵树处理完后,输出账本上的总代价。

输入格式

第一行两个整数 ,分别表示结点数与容量。

接下来 行:第 行一个整数 (),表示结点 的父结点。

输出格式

一行一个整数,表示全树合并的总代价。

样例

输入
5 2
1
2
3
4
输出
7

数据范围

背景知识

合并代价:把大小为 与 的两个集合合并、元素两两配对处理,代价正比于 ——树形背包把这一步记作合并孩子 的转移代价 。容量 相当于背包的容量上限:账本里每个因子都被截在 以内,这与背包数组第二维只开到 是同一件事。

一个漂亮的对照:如果完全不截断,整本账恰好等于 ——因为每一对点只在它们的最近公共祖先处合并一次, 个点两两配对正好这么多对。截断只会让账变小。也正因为截断,先合并哪个孩子会改变中间的 、从而记出不同的账,所以本题规定孩子按编号从小到大合并,答案唯一。

输入
输出

            
答案