首页 > 其他分享 >Solution Set【2024.2.16】

Solution Set【2024.2.16】

时间:2024-02-16 21:44:48浏览次数:29  
标签:2024.2 Set frac 矩阵 Solution times right 行列式 关键点

A. 寄(post)

对于点对贡献问题考虑在最近公共祖先处计算答案,称给定的 \(m\) 个点为关键点,选择的 \(k\) 个点为选择点。

既然我们已经要求了对于每一对关键点和选择点均在其最近公共祖先处计算答案,那么这也就意味着,存在某些节点,其子树中的关键点 / 选择点不会与其子树内的选择点 / 关键点配对。我们可以发现:若某节点子树内的关键点未与其子树内的选择点配对,那么产生的花费只与未配对的关键点数量有关;若某节点子树内的选择点未与其子树内的关键点配对,那么产生的花费只与其到子树根节点的距离有关,因此对于任意节点,其子树内将要与子树外的关键点配对的选择点只会存在一个最优选择。同时我们可以发现,对于任意节点,在考虑以其为最近公共祖先的点对时,每个儿子节点的子树不可能同时有未匹配的关键点和未匹配的选择点,否则这种情况一定不是最优情况。因此我们可以对上述两种情况进行 DP。

设 \(f_{u, i}\) 表示 \(u\) 子树内恰好存在 \(i\) 个关键点未配对的最小花费。\(g_{u, v}\) 表示 \(u\) 子树内不存在未配对的关键点且已经选择了点 \(v\) 作为与子树外的关键点进行配对的最小花费。使用类似于树上背包的转移即可。

复杂度为 \(\mathcal{O}(n^2)\)。

B. 摆(bigben)

首先将矩阵表示出来,下面以 \(n = 6\) 为例,我们有矩阵:

\[\begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 \\ C & 1 & C & 0 & C & 0 \\ C & C & 1 & 0 & C & 0 \\ C & C & C & 1 & C & C \\ C & C & C & C & 1 & C \\ C & C & C & C & C & 1 \\ \end{bmatrix} \]

发现主对角线以下的元素值均为 \(C\),因此我们可以执行变换 \(A_{i, j} \leftarrow A_{i, j} - A_{i - 1, j}\) 以将其转化为上 Hessenberg 矩阵。如下为变换后的矩阵:

\[\begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 \\ C - 1 & 1 & C & 0 & C & 0 \\ 0 & C - 1 & 1 - C & 0 & 0 & 0 \\ 0 & 0 & C - 1 & 1 - C & 0 & C \\ 0 & 0 & 0 & C - 1 & 1 - C & 0 \\ 0 & 0 & 0 & 0 & C - 1 & 1 - C \\ \end{bmatrix} \]

我们考虑上述矩阵是如何得到的:

  • 主对角线上的元素除 \(A_{1, 1}\) 外初始时均为 \(1 - C\)。
  • 主对角线左下的次对角线的元素值初始时均为 \(C - 1\)。
  • 对于其他元素初始时均为 \(0\)。

接下来我们执行如下操作:

  • 对于第 \(i\) 行,所有满足 \(j \neq i \land i \mid j\) 的 \(j\),均有 \(A_{i, j} \leftarrow A_{i, j} - C\)。
  • 对于第 \(i\) 行,所有满足 \(j \neq i - 1 \land \left(i - 1\right) \mid j\) 的 \(j\),均有 \(A_{i, j} \leftarrow A_{i, j} + C\)。

进而我们得到了上面的矩阵,其中 \(A_{2, 2}\) 初始时为 \(1 - C\),由于 \(2 \neq 1 \land 1 \mid 2\) 因此执行了 \(A_{2, 2} \leftarrow A_{2, 2} + C\)。

不难发现若 \(C = 1\) 只有当 \(n \le 2\) 时该矩阵的行列式值为 \(1\),否则为 \(0\)。

接下来为了方便计算,我们将矩阵中的元素均除以 \(1 - C\),设 \(V = \frac{C}{1 - C}\),操作后的矩阵形如:

\[\begin{bmatrix} \frac{1}{1 - C} & 0 & 0 & 0 & 0 & 0 \\ -1 & \frac{1}{1 - C} & V & 0 & V & 0 \\ 0 & -1 & 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 1 & 0 & V \\ 0 & 0 & 0 & -1 & 1 & 0 \\ 0 & 0 & 0 & 0 & -1 & 1 \\ \end{bmatrix} \]

我们考虑求其行列式,不妨设 \(f_{n}\) 表示前 \(n\) 行 \(n\) 列的矩阵的行列式。

我们考虑展开最后一列的行列式以求出 \(f_{n}\) 的值。

对于 \(A_{n, n}\),其贡献为 \(\left(-1\right)^{n + n} \times 1 \times f_{n - 1}\)。对于 \(i < n\),我们考虑 \(A_{n, i}\) 的代数余子式的值。不妨设 \(n = 6, i = 4\),那么删去第 \(i\) 行和 第 \(n\) 列后的矩阵如下:

\[\begin{bmatrix} \frac{1}{1 - C} & 0 & 0 & 0 & 0 \\ -1 & \frac{1}{1 - C} & V & 0 & V \\ 0 & -1 & 1 & 0 & 0 \\ 0 & 0 & 0 & -1 & 1 \\ 0 & 0 & 0 & 0 & -1 \\ \end{bmatrix} \]

可以发现此时前 \(i - 1\) 列的后 \(n - i\) 行均为 \(0\),那么根据行列式的置换定义,在前 \(i - 1\) 列选取的置换一定在前 \(i - 1\) 行中,进而后 \(n - i\) 行选取的置换一定在后 \(n - i\) 列中。因此我们可以将矩阵划分为两个子矩阵,其行列式乘积便为该矩阵的行列式。我们考虑这两个子矩阵,其中左上角的矩阵行列式为 \(f_{i - 1}\),这里不多赘述。而右下角的矩阵一定是一个上三角矩阵,其行列式为主对角线的元素之积。同时此子矩阵的主对角线上的元素均为原矩阵次对角线上的元素,其值均为 \(-1\)。

进而我们得到了 \(A_{n, i}\) 的代数余子式,其值为:

\[\begin{aligned} &\left(-1\right)^{n + i} \times f_{i - 1} \times \left(-1\right)^{n - i} \\ =&\times f_{i - 1} \end{aligned}\]

接下来我们考虑 \(A_{i, n}\) 的取值,不妨考虑其来源,即上述构造过程中的两种操作。设 \(d\) 满足 \(d \neq n \land d \mid n\),那么其会对 \(A_{n, d}\) 产生 \(-V\) 的贡献,会对 \(A_{n, d + 1}\) 产生 \(V\) 的贡献,对总行列式产生 \(V \times \left(f_d - f_{d - 1}\right)\) 的贡献。

至此我们得到了 \(f_n\) 的表达式:

\[\begin{aligned} f_0 &= 0 \\ f_1 &= \frac{1}{1 - C} \\ f_n &= f_{n - 1} + V \times \sum\limits_{d \neq n \land d \mid n} f_{d} - f_{d - 1} && n \ge 2 \\ \end{aligned}\]

发现难于计算,我们考虑其差分序列 \(g\),具体的,对于 \(n \ge 1\),设 \(g_n = f_n - f_{n - 1}\)。那么我们有:

\[\begin{aligned} g_0 &= 0 \\ g_1 &= \frac{1}{1 - C} \\ g_n &= V \times \sum\limits_{d \neq n \land d \mid n} g_{d} && n \ge 2 \\ \end{aligned}\]

那么我们要求的即其前缀和 \(f\)。考虑使用类似杜教筛的方法去处理。

\[\begin{aligned} f_n &= g_1 + \sum\limits_{i = 2}^{n} g_i \\ &= g_1 + \sum\limits_{i = 2}^{n} V\times \sum\limits_{d < i \land d \mid i} g_d \\ &= g_1 + V \times \sum\limits_{d = 1}^{n - 1} g_d \sum\limits_{d \neq i \land d \mid i} 1 \\ &= g_1 + V \times \sum\limits_{d = 1}^{n - 1} g_d \times \left(\left\lfloor\frac{n}{d}\right\rfloor - 1\right) \\ \end{aligned} \]

按上式递归计算即可得到时间复杂度为 \(\mathcal{O}(n^{\frac{3}{4}})\)。

我们考虑如何在线性的复杂度内预处理出前 \(n\) 项的 \(f\) 值。

我们可以发现若对 \(n\) 进行质因子分解,设 \(n = \prod p_i^{a_i}\),那么可重集 \(\left\{a_i\right\}\) 相同的 \(n\) 对应的 \(g_n\) 值相同。通过使用线性筛可以处理出每个数该集合的哈希值。

考虑本质不同的集合数量,发现其严格不多于 \(\log_2 n\) 的分拆数。因此对于每个集合我们寻找出一个代表元素,在根号的时间复杂度内枚举其因子并计算出 \(g\) 值即可。

因此我们可以在线性的复杂度内预处理出 \(f\) 的前缀。

总复杂度为 \(\mathcal{O}(n^{\frac{2}{3}})\)。

标签:2024.2,Set,frac,矩阵,Solution,times,right,行列式,关键点
From: https://www.cnblogs.com/User-Unauthorized/p/-/2024-2-16

相关文章

  • 2024.2.16 そんな凡庸を探して、探している
    Namid[A]me好听呢。可惜了。今天DP专题感觉laofu选的题有点经典,导致我有一半时间在摸鱼,不过还是写了点题的。怎么西工大附中有糖醋茄子这种神秘菜啊。ICPC2020MacauBBoringProblem其实不一定懂完了,试着说一说。显然询问没什么用,问题本质是要求解一个AC自动机上游......
  • 2024.2.16模拟赛总结
    前言:这次不太好,rank6,挂了108.5分,不挂就随便rank1了T1直接状压,设\(f[S][i][j][0/1]\)表示当前选的集合为S,最后两个分别为i,j的方案数和最优解,然后直接跑有亿点细节1:要开longlong,方案数可能很大(造一个完全图)2,要从合法的状态转移3,特判只有一个点的数据T2一道计算几何题首先......
  • C# get、set 说明
    一、get、set的基本简介  在面向对象编程(OOP)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用set和get方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一个“接口”。先来看一段代码:classEmployee{......
  • 2024.2.15 模拟赛
    模拟赛打的一般,T1做唐了,T2转化完发现不会数据结构,T3不会AC自动机白给了。T3鸽了,明天写个弱化版,嗯缝点东西我不知道怎么想的。下午讲了几个图论题,感觉有好几个题听得很懂,抽空再写吧,现在题真的太多了。神秘手玩一下会发现,奇数里面必定有恰好除以二下取整个数取负号。讨论......
  • 2024.2.15 咸话
    早上起来时突然真正意识到只有两周就要省选了。只是感觉,眼前的世界,太迷茫了。往事不堪回首,未来又可望不可及。成败真的就在此一时了,但是我为什么还有好多好多要准备的事。还记得初一时那个逆风翻盘的我和那段时光吗?短短四年,每次我都在重新寻回那时的我,但一次次的失败。前几天偶......
  • Solution Set - 咋提玄坛 | 说无可说
    说无可说。Ihavenothingtosay.Mihavasnenionpordiri.J'airienàdire.说无可说Link。我说,我去,暴力dp一次就是\(O(|S|^2)\)的了,直接起飞!题目说,我只要求相似度为\(1\sim8\)的字符串对数,theremustbeareason。我说,原来可以dfs,太神奇啦!但是这要怎么......
  • python类的实现中有关__setattr__原理问题
    python类的实现中有关__settar__原理问题具体解决思路问题代码段:classCustomAttributes:def__init__(self):self._attributes={}def__setattr__(self,name,value):#允许设置名为'_attributes'的属性,这是实现所必......
  • 当创建statefulset资源后,k8s组件如何协作
    当创建statefulset资源后,k8s组件如何协作点击关注......
  • 2024.2 训练纪要
    目录2024.2.15R35T2弱化的杨表R35T3达拉然的废墟THUWC+NOIWC+过年完了,得滚回来打模拟赛了。快要省选了哈哈。要寄大了。WC2024游记可能还是会持续更新的,毕竟讲的题整理没整理完代码也一个都没写,有点傻逼。2024.2.15100/100/20,sum220,rk12/98我这波是致......
  • Solution Set【2024.2.15】
    A.枇杷树考虑从增量的角度计算答案,若我们在构造树\(T_n\)时已经得到了树\(T_x\)和树\(T_y\)的答案\(Ans_x\)和\(Ans_y\),我们考虑如何得出\(Ans_n\)。考虑\(Ans_n\)与\(Ans_x+Ans_y\),发现即为跨越新增的边的所有路径权值之和。其可以表达为:\[f(x,u)\timessi......