本来不想做 ucup 了,但是发现我好像也没有别的题能做(大雾。
比赛链接。
C. Cliques
题意
给定一棵
进行
图
在每一次操作之后,输出图
题解
有点脑瘫了哥们。
首先可以知道,两条链的交一定是一条链(可能为空),所以多条链的交也一定是一条链。
那么令
那么考虑直接枚举
设有
带修的话直接上树剖就行,时间复杂度
提交记录。
G. Matrix Inverse
题意
给定一个矩阵
题目额外给出一个矩阵
题解
令
首先因为
考虑一个经典 trick,我们随机一个
如果
否则如果有
同理我们随机一个
此时如果有
这样我们就能确定
考虑
那么我们直接对于
时间复杂度
提交记录。
K. Jump Graph
题意
给定一个长度为
图上存在边
对于每一个点
题解
考虑建出这个排列的笛卡尔树(大根)。
考虑对于一个点
(这是显然的,首先这个点得跳出这个子树,如果要跳出子树就只能往祖先跳,那么显然只会往
那么考虑先求出每一个点到其子树内点的距离和,但是容易发现这里有一点问题。
假设我们要从点
但是我们发现
那么我们对于每一棵子树维护,以其整个区间的左侧一个极大点为起点,到整棵子树点的距离和是多少。
再额外维护,有多少个点,从左侧极大点的距离比从右侧极大点距离小,有多少个点相等,有多少个点右边小。
这样就能处理出大部分情况了,有少部分情况,子树左侧或右侧不存在极大点,可能需要特殊处理。
再预处理完每一个点到子树内的距离和之后,再递归一遍就能算出每一个点到子树外的距离和了。
时间复杂度
提交记录。
这题感觉写起来真的好煎熬好煎熬
B. The Doubling Game 2
题意
给定一棵
现在可以进行若干次操作,每一次操作为选定两个相邻节点,满足这两个节点上石头数量相等,然后把一个节点上的所有石头放到另一个节点上。
求最后能形成多少种石头排列的方案。
题解
感觉比较神秘啊这个题。
首先可以发现的事情是,一个节点上石头的个数一定是
然后,如果一个点上的石头被挪走了,那么这个节点上之后都不可能出现石头了。
考虑如果最后,某一个节点上有
首先,这个节点本身有
那么这个时候我们就可以考虑进行 dp 了。
设
转移的话,对于每一个点开一个
同理还有一个
直接转移,复杂度是
观察到一个结论,设
严谨证明不难,但是好像没有感性一点的证明方式,懒得写了。
直接观察到结论复杂度没什么改进,还是
考虑对于每一个点,将其所有儿子按照
那么显然,一个点
提交记录。
H. Inverse Problem
题意
给定一棵
一种染色方案是合法的,当且仅当对于任意的
给定一个数字