0%

[差 3 题][2nd ucup] Warsaw 站选做

本来不想做 ucup 了,但是发现我好像也没有别的题能做(大雾。

比赛链接

C. Cliques

题意

给定一棵 个点的树 和一个初始为空的图

进行 次操作,每一次操作为给图 加上或删掉一个点 ,满足

上的一个点对应了树 的一条路径,图 上两个点之间有边,当且仅当其对应的路径在 上有公共点。

在每一次操作之后,输出图 上有多少个子图是团。

题解

有点脑瘫了哥们。

首先可以知道,两条链的交一定是一条链(可能为空),所以多条链的交也一定是一条链。

那么令 的根为 ,设 里一个团的『关键点』为其所有链在 中的公共点里,最靠上的一个。

那么考虑直接枚举 中的点,计算其是多少个团的关键点。

设有 条链经过了这个点, 条链同时经过了这个点和他的父亲,那么这个点的贡献是

带修的话直接上树剖就行,时间复杂度

提交记录

G. Matrix Inverse

题意

给定一个矩阵 ,求出它的逆。

题目额外给出一个矩阵 ,保证 至多有 个位置不同。

题解

有多少个位置不同。

首先因为 过不了,所以我们甚至无法用矩阵乘法来判两个矩阵是否互为逆。

考虑一个经典 trick,我们随机一个 的矩阵 ,并且计算

如果 的话,那么大概率会有

否则如果有 ,那么就一定会有

同理我们随机一个 的矩阵 并计算

此时如果有 ,那么就一定会有

这样我们就能确定 个不同的位置在哪些行和列,现在我们有 个不确定的位置。

考虑 这个过程, 的第 行决定了 的第 行,而我们知道

那么我们直接对于 个关键行里面, 个关键列拿出来跑高斯消元就好了。

时间复杂度

提交记录

K. Jump Graph

题意

给定一个长度为 的排列 ,现在有一张有向图。

图上存在边 当且仅当对于每一个 都有

对于每一个点 ,求出 到其他所有点的距离之和。

题解

考虑建出这个排列的笛卡尔树(大根)。

考虑对于一个点 ,来说,其左子树的点如果想要跳到右子树,那么第一步肯定是跳到 或者

(这是显然的,首先这个点得跳出这个子树,如果要跳出子树就只能往祖先跳,那么显然只会往 ,其他的祖先很不优)。

那么考虑先求出每一个点到其子树内点的距离和,但是容易发现这里有一点问题。

假设我们要从点 到其右子树内某个点,可能是直接往下走,也有可能是先跳到 再往下走,这不好办。

但是我们发现 这条双向边是存在的,也就是说对于 ,有

那么我们对于每一棵子树维护,以其整个区间的左侧一个极大点为起点,到整棵子树点的距离和是多少。

再额外维护,有多少个点,从左侧极大点的距离比从右侧极大点距离小,有多少个点相等,有多少个点右边小。

这样就能处理出大部分情况了,有少部分情况,子树左侧或右侧不存在极大点,可能需要特殊处理。

再预处理完每一个点到子树内的距离和之后,再递归一遍就能算出每一个点到子树外的距离和了。

时间复杂度

提交记录

这题感觉写起来真的好煎熬好煎熬

B. The Doubling Game 2

题意

给定一棵 个点的树,初始的时候每一个节点上都有一个石头。

现在可以进行若干次操作,每一次操作为选定两个相邻节点,满足这两个节点上石头数量相等,然后把一个节点上的所有石头放到另一个节点上。

求最后能形成多少种石头排列的方案。

题解

感觉比较神秘啊这个题。

首先可以发现的事情是,一个节点上石头的个数一定是 的若干次方。

然后,如果一个点上的石头被挪走了,那么这个节点上之后都不可能出现石头了。

考虑如果最后,某一个节点上有 个石头,这些石头是怎么移动的。

首先,这个节点本身有 个石头,然后其相连的点里面,依次送来了 个石头来合并。

那么这个时候我们就可以考虑进行 dp 了。

表示 子树内部的答案, 表示 给父亲送恰好 个石子的方案数, 表示 的父亲需要给 恰好 个石子的方案数。

转移的话,对于每一个点开一个 表示已经确定了点 的前若干个儿子,现在点 已经有的 构成了集合 的方案数。

同理还有一个 表示 还缺这些集合的方案数。

直接转移,复杂度是

观察到一个结论,设 表示点 上最多可能有多少石子,那么 的。

严谨证明不难,但是好像没有感性一点的证明方式,懒得写了。

直接观察到结论复杂度没什么改进,还是

考虑对于每一个点,将其所有儿子按照 大小升序排序,并且做 dp 的时候 第二维只开 这么大。

那么显然,一个点 在和其父亲合并时,复杂度为 ,总复杂度为

提交记录

H. Inverse Problem

题意

给定一棵 个点的树,现在需要给每一个点染一个颜色,颜色共有 种。

一种染色方案是合法的,当且仅当对于任意的 都有点 颜色不同。

给定一个数字 ,构造一棵树使得染色方案数对 取模的结果为

组数据,时限 秒。