#Tree13. 树上活动安排

树上活动安排

练习 4:树上活动安排

题目描述:

给定一棵以 1 为根的有根树,每个结点 i 代表一个活动,有开始时间 s[i] 和结束时间 e[i]。现在要选择一些活动参加,要求:

  1. 如果选择了结点 u,则不能选择 u 的任意祖先或后代
  2. 在满足条件 1 的前提下,最多能参加多少个活动?

输入格式:

  • 第一行:一个正整数 n2 ≤ 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 子树最多选几个(此时所有后代都不能选)
  • 或者用贪心:按结束时间排序后,每次选择结束时间最早且不与已选活动冲突的