CF804F

首先对于两个点 (u,v)(u,v) 的合并,发现是每 gcd(au,av)\gcd(a_u,a_v) 个分成一段。

然后点 uu 的每一段都会跟点 vv 的每一段取或。

在强联通分量内的,两两都会贡献,于是计算其中所有点的 gcd\gcd,按这个数将每个点都成 modgcd\bmod \gcd 的等价类,每次修改一个等价类,强联通分量中每个点的这个等价类都会变成 11,个数容易算。

对于两两强联通分量的边,发现竞赛图缩点后类似链,于是只需要保留拓扑序相邻的点之间的边,共 O(n)\mathcal O(n) 条。

转移类似两个点的合并。

分析下复杂度,每次花费 O(aigcd)\mathcal O(\frac{a_i}{\gcd}) 的复杂度将 modgcd\bmod \gcd 的一个等价类全部覆盖成 11,只会覆盖 O(gcd)\mathcal O(\gcd) 次,所以复杂度是对的。

posted @ 2023-11-05 12:01  蒟蒻orz  阅读(0)  评论(0编辑  收藏  举报  来源