Codeforces Round 911 (Div. 2)

https://codeforces.com/contest/1900

D. Small GCD

题意

定义 f(x,y,z)f(x,y,z)x,y,zx,y,z 中较小两数的 gcd\gcd。给定数组 aa ,求所有三元组的 ff 之和。

数据范围:3n8×104,1ai1053\leq n\leq 8\times10^4,1\leq a_i\leq10^5

题解

aa 排序,依次枚举。我们维护当前所有数的二元组 gcd\gcd 之和,当前枚举到的数是最大数,它的贡献就是维护的这个值。

我们考虑如何维护这个值:这是一个经典的问题。我们维护 cnticnt_i 表示 ii 的倍数有多少个。对于当前的数 xx,我们从大到小枚举因子 yy。设 gcd(x,ai)=y\gcd(x,a_i)=yaia_i 的数量为 fyf_y,那么有 fy=cntyk2fkyf_y=cnt_y-\sum\limits_{k\geq2}f_{ky}。后面减的部分可以在每次处理完 yy 后对因子减去贡献。

E. Transitive Graph

题意

给出一个图,要求图的传递闭包中点权和最小的简单最长路。

题解

可以用强连通分量缩点,可以发现每个强连通分量在传递闭包中是一个完全图,因为我们需要的是最长路所以只要走到这个强连通分量就必须走完分量中的所有点。

然后跑个DAG上的DP就好了。


Codeforces Round 911 (Div. 2)
https://je3ter.github.io/2023/11/30/ACM/Codeforces Round 911 (Div. 2)/
作者
Je3ter
发布于
2023年11月30日
许可协议