#z1086. 树上排列切分
树上排列切分
题目描述
给定一棵有 个顶点的树,以及顶点 的一个排列 。
在排列的相邻位置之间进行切分。位置 与 之间的切分记为 切分点 ()。选择 个不同的切分点后,排列被分成 恰好 个非空连续块。
对于一个块,取出其中出现的所有顶点,并保留树中两个端点都在该块内的边,得到这个块诱导的子图。记该子图的连通分量数为这个块的得分。请计算所有合法切分方案中,各块得分之和的最大值。
输入格式
从文件 split.in 中读取数据。
第一行包含两个整数 。
接下来 行,每行包含两个整数 ,表示树中有一条连接顶点 和 的无向边。若 ,这部分没有输入行。
最后一行包含 个整数 ,表示给出的排列。
输出格式
输出到文件 split.out 中。
输出一个整数,表示最大得分之和。
样例
4 2
1 2
2 3
3 4
1 2 3 4
2
4 2
1 2
1 3
1 4
2 3 4 1
4
5 5
1 2
2 3
3 4
4 5
3 1 5 2 4
5
1 1
1
1
样例解释
样例 #1 解释
无论选择切分点 、 还是 ,两个块诱导的子图各有一个 连通分量,因此总得分都是 。
样例 #2 解释
选择切分点 时,左块的三个顶点彼此没有边,得到 个连通分量, 右块只有顶点 ,得到 个连通分量,总分为 ,这是最大值。
样例 #3 解释
每个块都只有一个顶点,所以每个块的得分为 ,总得分为 。
数据规模与约定
对于所有数据,保证:
- ;
- ;
- 且 ,给出的 条边互不重复并构成一棵树;
- 是 的一个排列。
本题采用子任务捆绑计分。每个子任务包含若干测试点,只有通过该子任务的全部测试点,才能获得该子任务的分数。各子任务分别计分。
| 子任务编号 | 分值 | 额外约束 |
|---|---|---|
| 无特殊限制 |
相关
在下列比赛中: