标签:set pst 指令 大于等于 比较 树形背包 概率 连接 任务
Access Globe 最近正在玩一款战略游戏。在游戏中,他操控的角色是一名C 国士 兵。他的任务就是服从指挥官的指令参加战斗,并在战斗中取胜。
C 国即将向D 国发动一场秘密袭击。作战计划是这样的:选择D 国的s 个城市, 派出C 国战绩最高的s 个士兵分别秘密潜入这些城市。每个城市都有一个危险程度d_idi?,
C 国指挥官会派遣战绩最高的士兵潜入所选择的城市中危险程度最高的城市,派遣战绩第二高的士兵潜入所选择的城市中危险程度次高的城市,以此类推(即派遣战绩第i高的士兵潜入所选择城市中危险程度第i 高的城市)。D 国有n 个城市,n - 1 条双向道路连接着这些城市,使得这些城市两两之间都可以互相到达。为了任务执行顺利,C 国选出的s 个城市中,任意两个所选的城市,都可以不经过未被选择的城市互相到达。
Access Globe 操控的士兵的战绩是第k 高,他希望能估计出最终自己潜入的城市的 危险程度。Access Globe 假设C 国是以等概率选出任意满足条件的城市集合S ,他希望你帮他求出所有可能的城市集合中,Access Globe 操控的士兵潜入城市的危险程度之和。如果选择的城市不足k 个,那么Access Globe 不会被派出,这种情况下危险程度为0。
当然,你并不想帮他解决这个问题,你也不打算告诉他这个值除以998 244 353 的 余数,你只打算告诉他这个值除以64,123 的余数。
Solution
由于本人太弱不会正解,这篇题解是暴力做法。
首先做第一步转化,就是考虑每个点会被选择多少次,算出来之后求个和就行了。
为了方便处理(由于是暴力),我们枚举每个点,然后对这个点做一遍树形dp,就设dp[i][j]表示包含i的联通块且i为联通块中深度最小的点,子树中点权大于等于d[root]的点的个数为j的联通块个数。
转移就是我们平常写的那种树形背包。
然后我发现了一个问题,就是对于一个点对ij且d[i]=d[j]时,包含它们的联通块在枚举i和j时都会被枚举到一次,答案就会算多。
如果做题比较多的话就能想出
卡边界的时候要注意判不合法。
标签:set pst 指令 大于等于 比较 树形背包 概率 连接 任务
原文地址:https://www.cnblogs.com/ZH-comld/p/10012846.html