一些问题

DFS Trees

边权不同,MST 固定。发现原问题转化为以 \(u\) 为根,MST 是否有横叉边。这是好做的,树上差分即可。(然而我不会。)

Two Centroids

让我们考虑重心有什么性质!

容易发现,如果一个点所有子树大小都 \(\leq \lfloor \frac{n}{2} \rfloor\),那么它是重心。

然后加点后的重心就可以维护了,因为它最多移动一步。具体地,若这个叶子加在子树 \(u\),那么:

  • \(siz_u >\lfloor \frac{n}{2}\rfloor\)

此时,因为只加了 \(1\),所以原来 \(siz_u\) 一定等于 \(\lfloor \frac{n}{2} \rfloor\)。然后现在肯定向 \(u\) 移动一步就行了。

  • \(siz_u \leq \lfloor \frac{n}{2}\rfloor\)

\(u\) 不变,原来满足条件的现在一定也满足条件。

然后维护一下最大子树就行了。假设当前最大子树 \(siz\)\(Max\),那么要将它补成 \(n-Max\),所需操作次数为 \(n-2Max\)

Increasing LCMs

可以发现这样一件事情,如果从左往右选择,每次钦定一个数,\(\text{LCM}\) 质因子次数不减。而每次选择的数又需要满足至少存在一个质因子次数大于当前 \(\text{LCM}\) 的该质因子次数,因此能选择的数是在逐渐变少的。但是如果从右往左选择,当前已经确定了从左往右第 \(i\) 个数,那么 \(y_{i-1}\) 的质因子次数是已经确定的,且次数逐渐减少,所以能发现选择是在变多的。而且对于每个质因子,可以发现能选择的数类似于一个栈的结构。因此,每次贪心选择能选的就是对的。

怎么 check 一个数是否能选?如果序列 \(x_1,x_2,\cdots,x_n\)\(n\) 位置合法,当且仅当 \(x_n\) 不整除 \(y_{n-1}\)。转化一下可以写成 \(\gcd(x_n,\text{lcm}(x_1,x_2,\cdots,x_{n-1})) < x_n\)。由于 \(\gcd\)\(\text{lcm}\) 的本质是 \(\min\)\(\max\) 一类的东西,所以可以写成 \(\text{lcm}(\gcd(x_1,x_n),\gcd(x_2,x_n),\cdots,\gcd(x_{n-1},x_n)) < x_n\)。左边式子显然不会超过 \(x_n\),然后就做完了。共 \(O(n)\) 个位置,每个位置选的数需要 check \(O(n)\) 次,每次 check 都要求 \(O(n)\)\(\gcd\),所以时间复杂度是 \(O(n^3 \log V)\) 的。

GCD Permutation

推式子!

我们知道,

\[[\gcd(a,b)=1]=\sum\limits_{d|a,d|b,d\geq 1}\mu(d) \]

让这个东西 \(-1\) 再取相反数的话,\(0\) 就会变成 \(1\)\(1\) 就会变成 \(0\)

因此,

\[[\gcd(a,b)\neq 1]=-\sum\limits_{d|a,d|b,d\geq 2} \mu(d) \]

于是,

\(\begin{aligned} \sum\limits_{i=1}^n \sum\limits_{j=1}^n [\gcd(i,j)\neq 1][\gcd(P_i,P_j)\neq 1] &= \sum\limits_{a=2}^n \sum\limits_{b=2}^n \mu(a)\mu(b)\sum\limits_{i=1}^n\sum\limits_{j=1}^n [a|i][a|j][b|P_i][b|P_j]\\ &=\sum\limits_{a=2}^n \sum\limits_{b=2}^n \mu(a)\mu(b)\sum\limits_{i=1}^n[a|i][b|P_i]\sum\limits_{j=1}^n[a|j][b|P_j]\\ &=\sum\limits_{a=2}^n\sum\limits_{b=2}^n\mu(a)\mu(b)(\sum\limits_{i=1}^n[a|i][b|P_i])^2 \end{aligned}\)

看上去不太好化了,不过到这一步就已经可以做了。先枚举 \(a\),再枚举 \(i\),再枚举 \(P_i\) 的因数。发现 \(a,b\) 都只有在 \(\mu \neq 0\) 时有贡献,所以我们在这里认为 \(i\) 的因数个数是 \(2^{\omega(i)}\)。于是,下标就会被 \(a\) 枚举 \(2^{\omega(i)}\) 次,且每次枚举到它它都会去枚举 \(2^{\omega(P_i)}\) 个因数。所以时间复杂度是 \(O(\sum 2^{\omega(i)} 2^{\omega(P_i)})\) 的。根据 songsilk 的结论(!!!),这个东西的最大值是 \(\sum 4^{\omega(i)}\)。在这个数据范围下,\(\omega(i) \leq 6\)。然后再去算一算,发现很小,可过。答案维护很简单。

Equal LCM Subsets

如果说 \(V\leq 10^{18}\) 的话,那么非常酷炫的,我们可以使用 Pollard-Rho 分解质因数。但是 \(V\leq 4 \times 10^{36}\),这是令人谔谔的。不过我们可以先考虑如果已经分解完了质因数应该怎么做。

谔谔,等会再写。

Many CRT

好多好多好多 CRT!!!

\(\gcd(c,d)=1\),由特殊到一般。

原问题就是对于 \(k=0,1,\cdots,N-1\),解方程组 \(x \equiv a+kb\pmod{c+kd}\)。我们很讨厌 \(a+kb\) 中的 \(k\),于是尝试消掉它。

\[\begin{aligned} x &\equiv a+kb &\pmod{c+kd}\\ dx &\equiv ad+kdb &\pmod{c+kd}\\ dx &\equiv ad+kdb-b(c+kd) &\pmod{c+kd}\\ dx &\equiv ad-bc &\pmod{c+kd} \end{aligned}\]

两边同乘 \(d\) 的步骤就用到了 \(\gcd(c,d)=1\) 的性质。

这样就好看多了,可以朴素的合并成

\[dx \equiv ad-bc \pmod{\text{lcm}(c,c+d,\cdots,c+(N-1)d)} \]

\(p=\text{lcm}(c,c+d,\cdots,c+(N-1)d)\)\(u=ad-bc\)。那么原式变为,

\[dx \equiv u \pmod{p} \]

\(p\) 实在是太大了,导致 \(x\) 不能正常地解出来。尝试把它写成普通式子,就变成了 \(dx = u + qp\)。此时 \(x=\frac{u+qp}{d}\)。忘说了,由于 \(\gcd(c,d)=1\),所以 \(\gcd(p,d)=1\),此时能发现 \(x\)\([0,p)\) 内有唯一整数解。也就是说,只要找到最小的 \(q\),满足:

  • \(u+qp \geq 0\)
  • \(qp \equiv -u\pmod{d}\)

解出不考虑限制 \(1\) 的最小正整数特解 \(q_0\),则满足限制 \(2\)\(q\) 的通解为 \(q_0+yd\)。那么代一下式子,得到 \(x = \frac{u+(q_0+yd)p}{d} = \frac{u+q_0p}{d}+yp\)。如果说 \(p\leq |u|\)\(y\) 不好确定,但是此时 \(p\) 很小,可以直接做。否则,容易发现 \(y\) 只可能有 \(0/1\) 两种取值。分讨一下即可。

但这一切实现的前提是我们能算出 \(p\bmod d\)\(p\bmod 998244353\)

这个也,太简单了。我们直接,谔谔,枚举一个质数然后就做完了。就是找到所有,满足 \(c+k'd \equiv 0 \pmod {p_0}\)\(k'\),然后就可以知道,谔谔,所有 \(\leq \sqrt{c+k'd}\) 的质因数。这个,可以,扩展欧几里得解一下,我们知道,就是,呃呃,它一个,这么多,大概有这么多解,就是,什么,\(d\)\(p_0\) 互质,然后呢,如果有 \(k_0\) 特解,那么就有通解 \(k'=k_0+zp_0\)。所以解的数量是,\(\sum\limits \frac{n}{p_i}\),这个好像是 \(O(n\log\log n)\) 的,根据这个,埃筛的证明,呃呃。

那么,如果 \(\gcd(c,d)\neq 1\) 怎么办哼哼哼啊啊啊啊啊啊啊。

UPD:谔谔,等会再写。谔谔,谔谔,谔谔。谔谔,谔谔。

troS XEM

首先,容易把题意转化为将原序列划分成若干长度 \(\geq 1\) 的奇数段,然后对于每一段进行操作,将其变成一个数,最后使得这些数不降。容易发现每个长度 \(\geq 3\) 的段操作后值必定在 \([0,3]\) 之间,所以可以只转移 \(dp_{i,j}\) 表示划分前 \(i\) 个数使得最后一段变成 \(j\) 的最小操作次数,其中 \(0\leq j\leq 3\),然后看能不能衔接一段第一个元素 \(\geq j\) 的不降后缀即可。

转移即为 \(dp_{i,x} = dp_{j-1,y} + \frac{i-j}{2}\),且需要满足 \(x\geq y\)\([j,i]\) 区间长度为奇数并且能够操作出 \(x\)。看起来要处理出每个区间能操作出哪些值,复杂度很高。不过可以证明所有区间长度 \(\geq 17\) 的区间都可以操作出 \(\{0,1,2,3\}\) 中的任意值,于是设 \(m=17\)。那么对于区间长度 \(\geq 17\) 的转移,做一个前缀 \(\min\) 就可以了。

现在只要处理出长度 \(< 17\) 的区间能操作出的值就可以了,共有 \(O(nm)\) 个区间,显然可以区间 DP,维护每个区间能操作出的值的集合。不过直接做要枚举两个断点,复杂度 \(O(nm^3)\)。但是显然可以先处理出只有一个断点时对应的两个区间的可操作值的二元组,即分步转移(?)。然后就可以做到 \(O(nm^2)\)。不过常数有点大,因为二元组个数可以达到 \(4^2\) 个(卡常小技巧:我们可以只存储无序二元组)。

!樽蛐尬⒋娲恢砸煽敲椅海汕技⌒3ǎ龈 \(2^4\) 降锎砸煽龈樽蛞蟠愕杏3徊!\()2^mn(O\) 降鲎砸煽途蠛蝗!浚ǎ埔讲址醇樽牡抵髯俨煽牡浼龈搅牡τ远笔愕隙龈灰杏恢龀砝Υ认砸煽蝗韵鞘!\()3^mn(O\) 榷釉锤愕隙龈搅倬睹鲎咏敝徊!虾牡抵牡龀髯俨苣浼龈棵せPD 浼砸煽蝗韵浼龈 \()mn(O\) 杏补肆砸煽途抵牡龀髯俨苣浼牡 \(71 <\) 榷こ龀砝Υ恢谠窒

!肆砸煽途 $nim$ 鹤扒龈灰鲎埔牡 $71 qeg$ 榷こ浼谟远疵悄!\(71=m\) 枭鞘谟抵庖稳牡兄 $}\3,2,1,0{$ 龀髯俨砸煽级浼牡 \(71 qeg\$ 榷こ浼杏髅ぶ砸煽徊!吒芎榷釉锤抵┬哪龀髯俨苣浼龈棵龀砝Υ蠢鹌纯!\)x$ 龀髯俨还苣仪⒉嫫榷こ浼 \(]i,j[\)\(y qeg\x\) 阕栊仪\(}2{}j-i{carf\ + }y,1-j{_pd = }x,i{_pd\) 醇埔

!煽醇鹤蠛到徊牡 $j qeg$ 厮龈灰诘味灰咏蜗苣徊苣纯蠛蝗\(3 qel\j qel\0\) 兄淦未髯俨⌒钭牡 \(j\) 沙浔味灰蠛钭玫故龈 \(i\) 扒址臼肀 \(}j,i{_pd\) 埔恢砸煽砸浼 \(]3,0[\) 谠ǘ乇抵蠛髯俨味牡 $3 qeg$ 榷こ龈棵窒⒎滓萑!到徊┬庹玫故蠛钭龈灰沙浔淦髯俨行味灰棵谟远蠛蝗味嫫牡 $1 qeg$ 榷こ筛羧沙址辛蛐庖馓寻滓萑认资

MEX Sort ###

UPD:可以直接转移最多能分多少段。

posted @ 2025-09-28 15:27  Just_int_mian  阅读(68)  评论(8)    收藏  举报