刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

活动人数

时间限制: 1000MS

内存限制: 65536KB

题目描述:

编程实现:活动人数

有一个大型企业集团,由N个部门组成,编号从1到N。这些部门之间的层次关系形成了一个树状结构,一个上级部门可能会有1个或多个直接下级部门,一个下级部门只有一个直接上级部门。

本月集团举办了一个大型活动,这次的活动组织方按如下要求安排活动:

1. 来的人越多越好;

2. 如果一个上级部门参加本次活动,那么他们的直接下级部门就不能参加,而他的间接下集部门可以参加(如下图,如果部门1参加,那么部门2、3不能参加,而部门4、5、6可以参加)。

请你帮他们计算一下,如何安排可以使参加活动的人数最多,并输出参加活动的最多人数。

例如:当N=6,每个部门编号为1到6,部门上下级关系和部门的人数如下图所示:

注意:示例中,部门1是层级最高的部门,没有直接上级,故将其直接上级部门设为0;

当安排(1、4、5、6)这4个部门参加活动时,人数最多,为11,所以输出11。

输入描述

第一行输入一个正整数N(1≤N≤100000),表示集团所有部门的数量

接下来有N行,每行输入三个非负整数F、S和C,(0≤F≤N,1≤S≤N,F≠S,1≤C≤1000),F表示是部门S的直接上级,C表示部门S的人数,整数之间用一个空格隔开

注意:如果是最上层的部门,其直接上级部门编号为0

输出描述

输出一个整数,表示参加活动的最多人数


样例输入

6

0 1 2

1 2 4

1 3 3

2 4 3

3 5 2

3 6 4

样例输出

11

使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于这个问题,我们可以使用动态规划来解决。首先,我们需要构建每个部门的直接上级部门之间的关系。然后,我们定义dp[i]为部门i参加活动时能够得到的最大人数。对于每个部门i,我们有两种选择:参加或者不参加。如果部门i参加,那么它的直接下级部门就不能参加,但是它可以获取自身的人数,并加上其所有间接下级部门的人数。如果部门i不参加,那么它自身不能获得人数,但是其直接下级部门可以选择参加或者不参加。因此,我们可以得到状态转移方程:dp[i] = max(C[i], sum(dp[j])),其中j是部门i的所有间接下级部门。具体实现时,我们可以使用深度优先搜索(DFS)来遍历每个部门的所有间接下级部门,并计算dp[i]。最后,我们遍历所有的部门,找到最大的dp值,即为参加活动的最多人数。

解析:

【喵呜刷题小喵解析】:
这个问题是一个典型的动态规划问题,可以通过构建状态转移方程来解决。由于部门之间的关系形成了一个树状结构,我们可以使用深度优先搜索(DFS)来遍历每个部门的所有间接下级部门,并计算dp值。具体来说,对于每个部门i,我们可以选择参加或者不参加,如果选择参加,那么它的直接下级部门就不能参加,但是它可以获取自身的人数,并加上其所有间接下级部门的人数;如果选择不参加,那么它自身不能获得人数,但是其直接下级部门可以选择参加或者不参加。因此,我们可以得到状态转移方程:dp[i] = max(C[i], sum(dp[j])),其中j是部门i的所有间接下级部门。最后,我们遍历所有的部门,找到最大的dp值,即为参加活动的最多人数。

需要注意的是,由于部门数量可能很大,我们需要使用高效的数据结构和算法来解决问题。例如,我们可以使用哈希表来存储每个部门的直接上级部门,使用邻接表来存储每个部门的所有间接下级部门,使用动态规划来计算dp值。同时,由于时间限制和内存限制,我们需要尽可能地优化算法,避免重复计算,减少时间和空间复杂度。
创作类型:
原创

本文链接:活动人数 时间限制: 1000MS 内存限制: 65536KB 题目描述: 编程实现:活动人数 有一

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share