吐槽一下数据,我式子推错了也能 50pts(
先不考虑边权,二分并跑最短路判定。
出题人居然没卡 SPFA(
对于一条边 (u,v),它的边权显然就是 au∑i=1av∑j=1[gcd(i,j)=1](i+j)。
显然可以考虑莫比乌斯反演。
根据套路,设 f(x)=au∑i=1av∑j=1[gcd(i,j)=x](i+j),F(x)=∑x|df(d)=au∑i=1av∑j=1[x|gcd(i,j)](i+j)。
对于 F(x),我们来变换一下。
au∑i=1av∑j=1[x|gcd(i,j)](i+j)=x∑xi≤au∑xj≤av(i+j)=x(⌊avx⌋∑xi≤aui+⌊aux⌋∑xj≤avj)=x⋅⌊aux⌋⌊avx⌋(⌊aux⌋+⌊avx⌋+2)2
那么我们要求的是 f(1)。
f(1)=min(au,av)∑i=1μ(i)F(i)=min(au,av)∑i=1μ(i)i⋅⌊aui⌋⌊avi⌋(⌊aui⌋+⌊avi⌋+2)2
于是预处理 μ(i)i 的前缀和即可。
代码:
1 |
|