• 「考试」省选75


    T1
    小清新数据结构。
    我们首先发现如果是在(mod 2^{k+1})条件下,询问的数目会变成一段连续区间。
    利用树状数组存储一下(mod 2^{k})的所有情况,这样维护(18)个树状数组和整体加减标记就可以很好的查询了。

    T2
    莫比乌斯反演
    存在结论:

    [d(ijk)=sumlimits_{x|i}sumlimits_{y|j}sumlimits_{z|k}[(x,y)=1][(x,z)=1][(y,z)=1] ]

    代入答案得到:

    [egin{aligned} ans&=sumlimits_{i=1}^{A}sumlimits_{j=1}^{B}sumlimits_{k=1}^{C}sumlimits_{x|i}sumlimits_{y|j}sumlimits_{z|k}[(x,y)=1][(x,z)=1][(y,z)=1]\ &=sumlimits_{x=1}^{A}sumlimits_{y=1}^{B}sumlimits_{z=1}^{C}lfloorfrac{A}{x} floorlfloorfrac{B}{y} floorlfloorfrac{C}{z} floorsumlimits_{i|(x,y)}mu(i)sumlimits_{j|(x,z)}mu(j)sumlimits_{k|(y,z)}mu(k)\ &=sumlimits_{i=1}^{min(A,B)}mu(i)sumlimits_{j=1}^{min(A,C)}mu(j)sumlimits_{k=1}^{min(B,C)}mu(k)sumlimits_{[i,j]|x}lfloorfrac{A}{x} floorsumlimits_{[i,k]|y}lfloorfrac{B}{y} floorsumlimits_{[j,k]|z}lfloorfrac{C}{z} floor\ f(n)&=sumlimits_{n|i}lfloorfrac{A}{i} floor\ g(n)&=sumlimits_{n|i}lfloorfrac{B}{i} floor\ h(n)&=sumlimits_{n|i}lfloorfrac{C}{i} floor\ &=sumlimits_{i=1}^{min(A,B)}sumlimits_{j=1}^{min(A,C)}sumlimits_{k=1}^{min(B,C)}mu(i)mu(j)mu(k)f([i,j])g([i,k])h([j,k])\ end{aligned}]

    直接枚举还是(O(n^3))的。
    考虑有可能对答案做出贡献的三元组((i,j,k)):

    [forall i,j,k,mu(i) ot= 0,mu(j) ot =0,mu(k) ot =0,[i,j]leq mx,[i,k]leq mx,[j,k]leq mx ]

    [d=(x,y),x=id,y=jd,(i,j)=1,ijdleq max(A,B,C) ]

    枚举(d,i,j)按照这个方法进行建边,然后三元环计数即可。
    边数为(m)数十万的级别。
    (msqrt{m})可以进行三元环计数
    这样只能计数三元环各不相同的情况。
    考虑有一对相同的时候,这种情况我们可以在建边枚举两个点的时候进行统计。
    而三个一模一样的就直接枚举这个点是谁就可以了。

    T3
    生成函数
    (H(x))为大小为(i)的生成图个数的(EGF)
    那么有:

    [H(x)=sumlimits_{i=0}^{+infty}2^{inom{i}{2}}x^i ]

    然后设(G(x))为大小为(i)的连通图的(EGF)
    那么有:

    [H(x)=sumlimits_{i=1}^{+infty}frac{G^i(x)}{i!}=e^{G(x)} ]

    所以:

    [G(x)=ln(H(x)) ]

    (F_{w}(x))为由(w)个连通块组成的大小为(i)的图的个数的(EGF)
    那么有(f_{w}(i)=sumlimits_{j=1}^{i}inom{i-1}{j-1}g(j)f_{w-1}(i-j))
    拆一下组合数卷积形式:

    [frac{f_{w}(i)}{(i-1)!}=sumlimits_{j=1}^{i}frac{g(j)}{(j-1)!}frac{f_{w-1}(i-j)}{(i-j)!} ]

    这样就简单了卷积一发就可以了。
    然后我们考虑一下题目的贡献。
    如果有(P)个连通块,那么贡献就是:

    [P^{K}=sumlimits_{i=0}^{K}egin{Bmatrix}K\iend{Bmatrix}P^{underline{i}}=sumlimits_{i=0}^{K}egin{Bmatrix}K\iend{Bmatrix}i!inom{P}{i} ]

    后面那个(inom{P}{i})转化一下组合意义就是从(P)个连通块中选出大小为i$个连通块的子集。
    那么就可以用上面求出来的东西计算了。

    [ans=sumlimits_{i=0}^{K}egin{Bmatrix}K\iend{Bmatrix}i!sumlimits_{j=1}^{n}f_{i}(j)2^{inom{n-j}{2}} ]

    后面的东西还是可以用卷积预处理。
    这样单次询问就可以做到(O(k))了。

  • 相关阅读:
    poj2352树状数组解决偏序问题
    Python中的输入(input)和输出打印
    Python中的输入(input)和输出打印
    IP协议
    IP协议
    Python中的可迭代Iterable和迭代器Iterator
    Python中的可迭代Iterable和迭代器Iterator
    Python中的变量和数据类型
    Python中的变量和数据类型
    TCP的三次握手和四次挥手和UDP协议
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12738546.html
Copyright © 2020-2023  润新知