首页 > 其他分享 >CF1060F

CF1060F

时间:2022-08-26 11:22:14浏览次数:82  
标签:子树 删除 dp1 删掉 节点 CF1060F 分配

所以为什么 $n$ 是 50 啊(

感觉真的,太难想了。

首先各个点的答案可以分开算,假设当前点为 x.其次这个期望没啥意义,直接先计算方案数再除一下就行了。还有就是只有删边是有一个端点是 x,那么这个时候要选 x,概率为 0.5,其他的都是随意选,不影响答案。

以上是一些简单的观察。

那么考虑对于每个节点,计算当前节点的父亲已经是 x 时子树可行的方案数再乘上每次和 x 有关的边剩下的点均是 x 的概率,这么一堆东西的值。发现这个并不好直接组合数计算,那么多设一维,表示当前节点,设为 u,和 x 中间这条边再整颗子树中有多少节点比它先被删掉。这个 dp1 转移就是把比它先删掉的边分配给每个子树,那么就需要辅助数组 dp2,表示 x 子树内被上面分配了若干条边要比上面某条边先删去的值,这个的转移有两种:

1.自己和父亲连的这条边不会经过删除变成和 x 有关的边,那么这条边肯定算在被分配到的要先删除的边,然后把剩下的分给子树。

2.自己和父亲连的这条边会经过删除变成和 x 有关的边,那么先枚举一个 j 表示和父亲连的边在子树内有多少个在它之前被删掉,容易发现这是 dp1 的值,而上面分配下来的那条边肯定要在当前和父亲连的边之前被删除,所以考虑被分配的边只能小于等于 j,用前缀和计算即可。

最后 dp1 x,0 *2 就是答案,因为假设 x 上方还有一个虚拟边,假设它第一个被删除,这样对后续删除顺序不影响,但是它贡献了 0.5 的系数,乘上即可,注意还要除掉总方案数 (n-1) 的阶乘。

其次就是那个分配给子树的方案数,其实就是前面的和后面的分开乘一下组合数就行了,应该来做 $2900$ 的人都会吧,就不细讲了(

复杂度 $O(n^3)$

首先这肯定是好题,但是出成 50 然后又搞小数就很看不懂,而且想不到四方做法是哪里多了一个 n,不会是出题人故意诈骗吧(

代码

up:懂了,感觉 $O(n^5)$ 的做法常数很小,应该想法也更直接一点,不过出题人为什么要放这做法过啊,不够毒瘤/ruo (

标签:子树,删除,dp1,删掉,节点,CF1060F,分配
From: https://www.cnblogs.com/njwrz/p/16626971.html

相关文章