zoukankan      html  css  js  c++  java
  • CF809E

    给一颗树,求

    [frac1{n(n-1)}sum_{i=1}^nsum_{j=1}^nφ(a_i*a_j)*dis(i,j)\ 一个柿子φ(ab)=φ(a)φ(b)φ(gcd(a,b)) ]

    代入

    [sum_{i=1}^nsum_{j=1}^nφ(a_i)φ(a_j)frac{gcd(a_i,a_j)}{φ(gcd(a_i,a_j))}dis(i,j)\ 提出来,相当于令d=那一坨\ largesum_{d=1}^nfrac d{φ(d)}sum_{i=1}^nsum_{j=1}^n[gcd(a_i,a_j)=d]φ(a_i)φ(a_j)dis(i,j)\ ]

    尝试设一个函数换掉一大坨,我们康到分数后的一大坨大概和(d)有关,令

    [f(d)=sum_{i=1}^nsum_{j=1}^n[gcd(a_i,a_j)=d]φ(a_i)φ(a_j)dis(i,j) ]

    搞个反演,假装有

    [F(x)=sum_{x|d}f(d) ]

    求解(F(x))不难发现

    [F(x)=sum_{i=1}^nsum_{j=1}^nφ(a_i)φ(a_j)[x|gcd(a_i,a_j)]dis(i,j) ]

    并且

    [f(x)=sum_{x|d}F(d)*μ(frac dx) ]

    (a)(1sim n)的排列,涉及到点总数为(nln n)的,所以枚举(x),把(x|d)的点拿下来建虚树,

    式子变成,(m)个点,点有点权,求:

    [sum_{i=1}^msum_{j=1}^mv_i*v_j*dis(i,j)\ sum_{j=1}^msum_{j=1}^mv_i*v_j*(dep_i+dep_j-2*dep_{lca})\ 令s=v_i*v_j\ sum_{i=1}^msum_{j=1}^ms*dep_i+s*dep_j-2*s-dep_{lca}\ ]

    拆成三个(sum)

    不难发现前两个相同,显然可以(O(m))处理

    后面那一坨,需要在树上(dp),在(lca)处合并答案,(dp_i)表示(i)内部子树权值总和,换根(dp)

    建虚树(log),复杂度(O(nlog^2n))

    代码仙姑(先咕)

  • 相关阅读:
    关于java.lang.reflect.InvocationTargetException
    Java并发编程(三)后台线程(Daemon Thread)
    Lab 7-2
    Lab 7-1
    Lab 6-3
    Lab 6-2
    Lab 6-1
    Lab 5-1
    Lab 3-4
    Lab 3-3
  • 原文地址:https://www.cnblogs.com/shikeyu/p/13810038.html
Copyright © 2011-2022 走看看