CF1916G Optimizations From Chelsu 题解

发布时间 2024-01-02 09:26:33作者: hubingshan

Optimizations From Chelsu

题意

给定 \(n\) 个结点的树,边有正整数边权 \(w_i\)。定义 \(len(u,v)\) 表示 \(u\)\(v\) 的路径的边数,\(\gcd(u,v)\) 表示 \(u\)\(v\) 的路径上所有边权的 \(\gcd\),特别地 \(\gcd(u,u)=0\)。对于所有 \(u,v\in[n]\),求 \(\max (len(u,v)\times \gcd(u,v))\)

大致思路

我们考虑共用一个顶点的两条链对答案的更新情况,令他们长度,gcd,分别为 \(len_1,len_2,g_1,g_2(len_1\ge len_2)\),我们发现只有满足以下几个条件才能更新答案:
1. \(gcd(g_1,g_2)=g_1\),不然的话 \(gcd(g_1,g_2)\le \frac{g_1}{2}\)
2. \(g_2\le len_1\times g_1\)
推导:\(g_2=k\times g_1\)能贡献答案当且仅当 \(g_1\times(len_1+len_2)\ge g_1\times k\times len_2\rightarrow (k-1)\times g_1\times len_2\le g_1\times len_1\)

于是我们可以考虑淀粉质,枚举重心之后,对于每个 \(g\),求出其最长链的长度 \(len\) ,然后枚举 \(k(k\le len)\) ,求出 \(g_2\) 更新答案即可

复杂度证明

考虑每一层分治,对于每个 \(g\) 枚举 \(k\) 的过程看作遍历这个点到重心的路径,那发现每条边最多只会被覆盖 \(log_w\) 次,于是总复杂度为 \(O(nlog_nlog_w)\)