#Tree13. 树上活动安排
树上活动安排
练习 4:树上活动安排
题目描述:
给定一棵以 1 为根的有根树,每个结点 i 代表一个活动,有开始时间 s[i] 和结束时间 e[i]。现在要选择一些活动参加,要求:
- 如果选择了结点
u,则不能选择u的任意祖先或后代 - 在满足条件 1 的前提下,最多能参加多少个活动?
输入格式:
- 第一行:一个正整数
n(2 ≤ n ≤ 1000) - 第二行:
n-1个正整数f_2, f_3, ..., f_n,其中f_i表示结点i的父结点编号 - 接下来
n行:每行两个正整数s[i], e[i](1 ≤ s[i] < e[i] ≤ 10000)
输出格式:
- 一行,一个整数,表示最多能参加的活动数
样例输入:
5
1 1 2 2
1 3
2 5
4 7
6 9
8 10
样例输出:
3
提示:
- 贪心 + 树形 DP
- 先按结束时间对所有活动排序
- 树形 DP:
dp[u][0]表示不选u时,u子树最多选几个 dp[u][1]表示选u时,u子树最多选几个(此时所有后代都不能选)- 或者用贪心:按结束时间排序后,每次选择结束时间最早且不与已选活动冲突的