T1

大水题,用位运算更加便捷求解。

T2

看出来有环了,但是没往基环树上想,寄。

暴力分,有部分分是基础树,可以跑一遍深搜,根节点的选择是 k 种颜色,剩下的是 k - 1 种颜色。还有暴力是可以二分图染色做出来的。

正解,我们对于一个环上的操作,可以用递推式子求出来。f[0][i], f[1][i] 分别表示和第一种的颜色不一样、一样。对于不一样的我们在转移的时候是 $ f[0][i] \gets f[1][i-1] * (k - 1) + f[0][i-1] * (k - 2)$,不同色的时候 \(f[1][i] \gets f[0][i-1]\)。完成了环上的递推。

一般的基环树,我们还会有很多的出边,对于出边我们可以把他们看成一棵一棵的树。我们可以用拓扑排序把这些出边给砍掉。

从本质上来说,这个题目是一个树形结构,并不是基环树dp。以后多注意这种相互依赖的关系,可能就会出现基环树的形式,然后将基环树砍开来看是不是能分解成两部分分别计算。

少生孩子多取模

T3

很像提高组之前的一个题 mayan 游戏,代码都很长很臭,让人不想写事实也确实是这样,考场上写出来但是不想调不想再看了所以给删了重新写了个小暴力。

T4

暴力分考虑

考虑出来链的情况:

首先考虑链的情况,如果它是一根链的话,每个边之间的概率都是独立的,链之间的转移就是将每一根上的概率乘起来 dp[i][j] 前 i 个点,目前长度为 j。

枚举这个边的长度,$dp[i+1][j+k] \gets dp[i+1][j+k] + dp[i][j] * 1 / p $

题目中的最长距离就是一条树的直径,因此我们考虑树的直径的形成过程,是由两个子树中最大的两个链组合而成,所以我们可以枚举一个从根节点的最长链,然后我们再考虑另外的子树中的最长的一根链。之后枚举根节点到这个链的距离,然后用之前的链的情况进行合并。

//dp[x][j]表示x这个子树前面的儿子中,最远距离为j的概率
//tmp0[k]表示x向当前儿子y最远距离为k的概率
//tmp1为新的最远距离的概率
for(int j=0;j<=L;j++)
for(int k=0;k+j<=S;k++)
tmp0[j+k]+=p*dp[y][k];
for(int j=0;j<=S;j++)
for(int k=0;k+j<=S;k++)
tmp1[max(j,k)]+=dp[x][j]*tmp0[k];
for(int j=0;j<=S;j++)dp[x][j]=tmp1[j];

但是时间复杂度会被卡掉,所以说我们还要进行优化。

我们看到中间的这两层循环,本质是在不断枚举,是当前这一棵子树中产生了最长链,还是在前面的分支中,所以说我们可以给它们用前缀和统计出来,之后减去二者相等的情况。sum[0][i] 表示在前面的分支中出现了链最长, sum[1][i] 表示在当前的这个链上的长度是最大的。

随机推荐

  1. Apple、AWS 这些科技巨头,已悄然入局隐私计算

    随着数字化时代的到来,数据已经成为企业竞争的重要资源.然而,与此同时,数据隐私泄露的风险也在不断增加,这已经成为了公共安全和个人权利保护的重要问题.为了解决这个问题,科技巨头谷歌.苹果.亚马逊纷纷入局 ...

  2. JWT解析详解

    JWT解析详解:> https://www.fke6.com/html/77107.html

  3. MYSQL之批量删除(mybatis)

    如果参数是array数组 <update id="deleteAll"> delete from C_V WHERE UUID in <foreach item= ...

  4. 一行命令使用 Docker 编译 Latex 文件,简单优雅

    使用 Docker 编译 LaTeX 文章 LaTeX 是一种常用的排版系统,它可以帮助用户创建漂亮.专业的文档.但是,安装和配置 LaTeX 比较麻烦,特别是对于初学者而言. Docker 是一个开 ...

  5. iptables防火墙调试,想打印个日志就这么难

    背景 怎么会讲这个话题,这个说来真的长了.但是,长话短说,也是可以的. 我前面的文章提到,线上的服务用了c3p0数据库连接池,会偶发连接泄露问题,而分析到最后,又怀疑是db侧主动关闭连接,或者是服务所 ...

  6. TOML是什么格式

    TOML(Tom's Obvious, Minimal Language)是一种用于配置文件的轻量级.易读的数据序列化格式.它由Tom Preston-Werner创建,旨在成为一种简单直观的配置文件 ...

  7. redis 中的 set

    set是String中的无序集合  底层是 是 value为null 的hash表  时间复杂化是o(1): sadd  k1 v1 v2 v3  set中添加数据 smembers k1 取出set ...

  8. python:map函数

    参考示例 def test(x): return x * 2 mylist = [1, 2, 3, 4, 5] result = list(map(test, mylist)) print(resul ...

  9. Cesium Billboard加载Gif图片

    https://blog.csdn.net/xietao20/article/details/109404491

  10. win10右键添加打开cmd窗口的命令

    创建文本文档,复制如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\b ...