#sXDPybttg050208. 1582:周年纪念晚会

1582:周年纪念晚会

好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:


题目描述

Ural 州立大学的校长正在筹备学校的 80 周年纪念聚会。由于学校的职员有不同的职务级别,可以构成一棵以校长为根的人事关系树。每个职员都有一个唯一的整数编号,从 11NN 编号,且对应一个参加聚会所获得的欢乐度 pip_i。为使每个职员都感到快乐,校长设法使每个职员和其直接上司不会同时参加聚会。

你的任务是设计一份参加聚会者的名单,使总欢乐度最高。


输入格式

第一行是一个整数 NN

接下来 NN 行对应 NN 个职员的欢乐度,第 ii 行的一个整数为第 ii 个职员的欢乐度 pip_i

接着是学校的人事关系树,每一行格式为 L K,表示第 KK 个职员是第 LL 个职员的直接上司,输入以 0 0 结束。


输出格式

输出一行一个整数,表示参加聚会者获得的最大欢乐度。


样例

样例输入

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0

样例输出

5

样例解释

N=7N=7,所有职员欢乐度均为 11

人事关系:

  • 3 是 1 的上司
  • 3 是 2 的上司
  • 4 是 6 的上司
  • 4 是 7 的上司
  • 5 是 4 的上司
  • 5 是 3 的上司

所以树结构为:

    5
   / \
  3   4
 / \ / \
1  2 6  7

(根节点是5)

限制:不能同时选一个节点及其直接上司。

求最大欢乐度:
一种最优方案:选 3, 4, 1, 2, 6, 7 中的哪些?
如果选 3,则不能选 1,2,5;
如果选 4,则不能选 5,6,7;
如果选 5,则不能选 3,4。

枚举可能性:

  • 选 5,不能选 3,4,只能从 {1,2,6,7} 中选,欢乐度 1+1+1+1+1=5
  • 不选 5,可以选 3 和 4,但 3 和 4 不冲突,可以同时选,然后 1,2 不能选(因为 3 选了),6,7 不能选(因为 4 选了),总欢乐度 1+1=2,不如 5。

所以最大欢乐度是 5(选 5 和它的四个下属中的四个?不对,选 5 后,3,4 不能选,1,2,6,7 都能选,共 5 个节点,欢乐度各 1,总 5)。

因此输出 5。


数据范围

对于 100%100\% 的数据:

  • 1N60001 \le N \le 6000
  • 128pi127-128 \le p_i \le 127(欢乐度可能为负)

时空限制

  • 时间:1000 ms1000 \text{ ms}
  • 内存:524288 KB524288 \text{ KB}

提示
此题为 树的最大权独立集 问题(没有上司的舞会)。

状态定义:

  • dp[u][0]dp[u][0] 表示以 uu 为根的子树,且 uu 不参加聚会时的最大欢乐度;
  • dp[u][1]dp[u][1] 表示以 uu 为根的子树,且 uu 参加聚会时的最大欢乐度。

转移方程:

  • uu 不参加,则其子节点 vv 可参加或不参加:$$dp[u][0] = \sum_{v \in son(u)} \max(dp[v][0], dp[v][1])$$
  • uu 参加,则其子节点 vv 不能参加:dp[u][1]=pu+vson(u)dp[v][0]dp[u][1] = p_u + \sum_{v \in son(u)} dp[v][0]

初始化:叶子节点 dp[u][0]=0,dp[u][1]=pudp[u][0] = 0, dp[u][1] = p_u

最终答案为 max(dp[root][0],dp[root][1])\max(dp[root][0], dp[root][1]),其中 rootroot 是整棵树的根(需要根据输入找出根,即没有上司的节点)。

复杂度 O(N)O(N)