当前位置 博文首页 > Jozky86的博客:牛客练习赛55E树

    Jozky86的博客:牛客练习赛55E树

    作者:[db:作者] 时间:2021-09-21 18:14

    牛客练习赛55E树

    题意:

    你有一颗大小为n 的树,点从 1 到 n 标号。
    设dis(x,y)表示 x 到 y 的距离。
    ∑ i = 1 n ∑ j = 1 n d i s 2 ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{n}dis^2(i,j) i=1n?j=1n?dis2(i,j)对998244353取模的结果

    题解:

    我们以1为根,设dep[i]表示第i个点的深度
    d i s ( x , y ) = d e p [ x ] + d e p [ y ] ? 2 d e p [ l c a ( x , y ) ] dis(x,y)=dep[x]+dep[y]-2dep[lca(x,y)] dis(x,y)=dep[x]+dep[y]?2dep[lca(x,y)]
    所以
    将dis(i,j)展开
    d i s 2 ( i , j ) = d e p 2 [ x ] + d e p 2 [ y ] + 2 ? d e p [ x ] ? d e p [ y ] + 4 ? d e p 2 [ l c a ( x , y ) ] ? 4 ? ( d e p [ x ] + d e p [ y ] ) ? d e p [ l c a ( x , y ) ] dis^2(i,j)=dep^2[x]+dep^2[y]+2*dep[x]*dep[y]+4*dep^2[lca(x,y)]-4*(dep[x]+dep[y])*dep[lca(x,y)] dis2(i,j)=dep2[x]+dep2[y]+2?dep[x]?dep[y]+4?dep2[lca(x,y)]?4?(dep[x]+dep[y])?dep[lca(x,y)]
    对于前两项 d e p 2 [ x ] + d e p 2 [ y ] dep^2[x]+dep^2[y] dep2[x]+dep2[y]:因为x和y都是枚举1~n,所以就是求 2 d e p [ i ] ? d e p [ i ] , 1 < = i < = n 2dep[i]*dep[i],1<=i<=n 2dep[i]?dep[i],1<=i<=n
    对于第三项: 2 ? d e p [ x ] ? d e p [ y ] 2*dep[x]*dep[y] 2?dep[x]?dep[y]:先求出 m a x x = ∑ i = 1 n d e p [ i ] maxx=\sum_{i=1}^{n}dep[i] maxx=i=1n?dep[i],然后用 ∑ i = 1 n m a x x ? d e p [ i ] ? 2 \sum_{i=1}^{n}maxx*dep[i]*2 i=1n?maxx?dep[i]?2
    对于后两部分,我们需要计算lca(x,y)=i的(x,y)这样的数对个数,以及dep[x]+dep[y]之和
    先解答第一个:数对个数为: s i z e 2 [ i ] ? ∑ j ∈ s o n [ i ] s i z e 2 [ j ] size^2[i]-\sum_{j∈son[i]}size^2[j]