test2024.2.23

圣诞树

题意:

\(m\) 种颜色的彩球装点 \(n\) 层的圣诞树。圣诞树的第 \(i\) 层恰由 \(l_{i}\)个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不同。求有多少种装点方案。

\(n,m \le 10^6, 1 \le l_{i} \le 3 \times 10^3,\sum l_{i} \le 10^7\)

分析:

考虑 dp。

\(f_{i,j}\) 表示用 \(j\) 种颜色布置 \(i\) 个球的方案数(钦定第 \(x\) 种颜色的球最早出现的位置比 \(x+1\) 的小)。因此用 \(f_{i,j} \times j!\) 就是原来的方案。

不难得到 \(f_{i,j}=f_{i-1,j-1}+f_{i-1,j} \times (j-1)\)。要么第 \(i\) 个球新用一种颜色,要么用以前的颜色(不能和上一个相同)。

可是题目需要求 \(n\) 层耶。再记 \(dp_{i,j}\) 表示前 \(i\) 层,第 \(i\) 层恰用了 \(j\) 种颜色的方案数。

如果不考虑相邻两层所使用彩球的颜色集合不同的限制,那么:

\[dp_{i,j}=C_{m}^{j} \times j! \times f_{l_{i},j} \times \sum_{k=1}^{\min(l_{i-1},m)} dp_{i-1,k} \]

加上这个限制,只需要减掉相邻两层所用彩球颜色集合一样的方案数:

\[dp_{i,j}=C_{m}^{j} \times j! \times f_{l_{i},j} \times \sum_{k=1}^{\min(l_{i-1},m)} dp_{i-1,k}-dp_{i-1,j} \times f_{l_{i},j} \times j! \]

时间复杂度 \(O(L^2+\sum L)\)

过河

题意:

小奇特别喜欢猪,于是他养了 \(n\) 只可爱的猪,小奇找到了一条船,可惜这条船一次只能载小奇外加一只猪(可以不载猪),于是小奇只能在两条河岸之间来回运送猪或者空船跑路。这些猪之间的关系可以用 \(m\) 个三元组 \((a,b,c)\) 表示,当 \(a,b,c\) 号猪与小奇不在一起时,他们会进行斗殴。

当然,小奇在运送猪的时候希望猪之间不发生任何斗殴现象,他希望询问你是否有运送方案。

\(t\) 组数据。

\(n \le 1 \times 10^3, m \le 3 \times 10^3, t \le 10\)

分析:

非常有趣的题目。

\(x\) 表示所有三元组都有的元素,若不存在则无解,若有多个任取一个显然得到的条件是等价的。

将所有三元组除去 \(x\) 后的两个元素连一条边。考虑一下运猪的策略:

  • 第一步显然只能把 \(x\) 运到对岸。

  • 接着将一些猪运到对岸。由于 \(x\) 在对岸,因此需要满足对岸的猪两两之间不能有边

  • 然后此时需要把 \(x\) 运回来,在运 \(x\) 回来之前可以先将一头猪 \(i\) 运到对岸去。(即使 \(i\) 与对岸的猪有边也没关系,因为我们下一步就是将 \(x\) 运回来)。

  • 此时 \(x\) 回到原河岸了,因此需要运走一头猪 \(j\) 使得,原河岸的猪两两之间不能有边。

  • 再将除 \(x\) 外的猪运到对岸。

  • 最后将 \(x\) 运到对岸。

我们惊奇的发现:是否有运送方案等价于是否存在 \(i,j\) 使得原图除去 \(i,j\) 后能使得原图变成二分图。

因此得到了一个时间复杂度为 \(O(Tn^2m)\) 的算法,可以通过 \(60\%\) 的数据。

可以只枚举 \(i\),那么我们需要快速判断一个图是否能够通过删除一个点使得其为二分图,这个问题的解决方案如下:

由于二分图的充要条件是不存在奇环,因此可以找出图中所有的奇环,判断环的路径交是否不为空

考虑在 DFS 生成树上解决。

对于 \(x \rightarrow y\) 的一条返祖边,如果 \(dep_{x}-dep_{y}+1\) 为奇数,说明构成了一条奇环(这类环记做树边环)。再利用树上差分求交。

但是这样并不能得到所有的奇环。

图中绿色的点显然就不在其中一个奇环的路径上。因此我们需要特殊判断这类点。

\(f_{x},g_{x}\) 表示跨过 \(x\) 的奇、偶树边环的其中的一个端点的深度最小值。

那么是否为绿色点的条件即为 \(dep_{x} < f_{x}, dep_{x} < g_{x}\)(偶数 \(-\) 奇数 \(=\) 奇数)。

时间复杂度为 \(O(Tnm)\)

点对游戏

题意:

桑尼、露娜和斯塔在玩点对游戏,这个游戏在一棵节点数为 \(n\) 的树上进行。桑尼、露娜和斯塔三人轮流从树上所有未被占有的节点中选取一点,归为己有。轮流顺序为桑尼、露娜、斯塔、桑尼、露娜……。该选取过程直到树上所有点都被选取后结束。选完点后便可计算每人的得分。点对游戏中有 \(m\) 个幸运数,在某人占据的节点中,每有一对点的距离为某个幸运数,就得到一分。(树上两点之间的距离定义为两点之间的简单路径的边数)

你的任务是,假设桑尼、露娜和斯塔每次选取时,都是从未被占有的节点中等概率选取一点,计算每人的期望得分。

分析:

记桑尼得到的点的个数为 \(x\)

再设距离为幸运数字的点对的个数为 \(k\)

显然,桑尼的期望得分为 \(\frac{x \times (x - 1) \times k}{n \times (n - 1)}\),露娜和斯塔同理。

\(k\) 用点分治求解即可。

posted @ 2024-02-27 21:56  小超手123  阅读(6)  评论(0编辑  收藏  举报