zoukankan      html  css  js  c++  java
  • OJ2504

    题目要求这个式子:

    (frac{1}{n(n-1)}sum_{i=1}^nsum_{j=1}^nvarphi(a_i*a_j)*dist(i,j))

    其中(a_i)(1)(n)的一个排列

    首先一个结论是:

    (varphi(i*j)=frac{varphi(i)*varphi(j)*gcd(i,j)}{varphi(gcd(i,j))})

    按照套路枚举gcd提出来:

    (sum_{d=1}^nfrac{d}{varphi(d)}sum_{i=1}^nsum_{j=1}^n[gcd(a_i,a_j)==d]varphi(a_i)varphi(a_j)*dist(i,j))

    根据反演的式子:

    (F(d)=sum_{d|n}f(d))

    (f(n)=sum_{d|n}mu(d)F(lfloorfrac{n}{d} floor))

    于是反演后面的式子:

    (sum_{d=1}^nfrac{d}{varphi(d)}sum_{k=1}^nmu(k)sum_{kd|a_i}sum_{kd|a_j}varphi(a_i)varphi(a_j)*dist(i,j))

    枚举(kd=T)

    (sum_{T=1}^nsum_{d|T}frac{dmu(frac{T}{d})}{varphi(d)}sum_{T|a_i}sum_{T|a_j}varphi(a_i)varphi(a_j)*dist(i,j))

    对于后面的,把权值为(T)的倍数的点提取出来建立虚树跑树形dp。

    发现一共(O(nlogn))个点,于是时间复杂度是(O(nlog^2n))

  • 相关阅读:
    LeetCode-Longest Substring Without Repeating Characters
    LeetCode-Add Two Numbers
    LeetCode-Two Sum
    品格的塑造
    闰年的来历
    float在内存中的存取方法
    矩阵顺时针旋转90度
    研究生毕业论文查重
    PAT1009
    PAT1008
  • 原文地址:https://www.cnblogs.com/Kylin-xy/p/tijiefzoj2504.html
Copyright © 2011-2022 走看看