Bzoj5093: 图的价值

题面

Bzoj

Sol

一张无向无重边自环的图的边数最多为\(\frac{n(n-1)}{2}\)
考虑每个点的贡献
\[n*2^{\frac{n(n-1)}{2} - (n-1)}\sum_{i=0}^{n-1}i^kC(n-1, i)\]
很好理解
考虑后面的\(\sum_{i=0}^{n-1}i^kC(n-1, i)\)
\(i^k\)这里把它用第二类斯特林数表示出来
那么就是
\[\sum_{i=0}^{n-1}\sum_{j=0}^{i}S(k, j) j!C(i, j)\]
\[=\sum_{j=0}^{n-1}S(k, j)j!\sum_{i=j}^{n-1}C(n-1,i)C(i,j)\]

考虑\(\sum_{i=j}^{n-1}C(n-1,i)C(i,j)\)
就是\(C(n-1, j)\sum_{i=j}^{n-1}C(n-1, i-j)=C(n-1,j)2^{n-1-j}\)

带回去
\[\sum_{j=0}^{n-1}j!C(n-1,j)2^{n-1-j}S(k, j)\]
\[=\sum_{j=0}^{n-1}\frac{(n-1)!}{(n-1-j)!}2^{n-1-j}S(k,j)\]
又由于\(i>j\)时\(S(i, j)=0\),\(n\)很大枚到\(k\)就可以了

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int Zsy(998244353);
const int Phi(998244352);
const int G(3);
const int _(8e5 + 5);

IL int Input(){
    RG int x = 0, z = 1; RG char c = getchar();
    for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
    for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
    return x * z;
}

int n, k, ans, A[_], B[_], l, N, r[_], mx, fac[_], inv[_];

IL int Pow(RG ll x, RG ll y){
    RG ll ret = 1;
    for(; y; y >>= 1, x = x * x % Zsy) if(y & 1) ret = ret * x % Zsy;
    return ret;
}

IL void NTT(RG int* P, RG int opt){
    for(RG int i = 0; i < N; ++i) if(i < r[i]) swap(P[i], P[r[i]]);
    for(RG int i = 1; i < N; i <<= 1){
        RG int W = Pow(G, Phi / (i << 1));
        if(opt == -1) W = Pow(W, Zsy - 2);
        for(RG int p = i << 1, j = 0; j < N; j += p)
            for(RG int w = 1, k = 0; k < i; ++k, w = 1LL * w * W % Zsy){
                RG int X = P[k + j], Y = 1LL * w * P[k + j + i] % Zsy;
                P[k + j] = (X + Y) % Zsy, P[k + j + i] = (X - Y + Zsy) % Zsy;
            }
    }
    if(opt == 1) return;
    RG int Inv = Pow(N, Zsy - 2);
    for(RG int i = 0; i < N; ++i) P[i] = 1LL * P[i] * Inv % Zsy;
}

IL void Mul(){
    for(N = 1; N <= mx + mx; N <<= 1) ++l;
    for(RG int i = 0; i < N; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));
    NTT(A, 1); NTT(B, 1);
    for(RG int i = 0; i < N; ++i) A[i] = 1LL * A[i] * B[i] % Zsy;
    NTT(A, -1);
}

IL void Up(RG int &x, RG int y){
    x += y;
    if(x >= Zsy) x -= Zsy;
}

int main(RG int argc, RG char* argv[]){
    n = Input(), k = Input(), mx = min(n - 1, k);
    fac[0] = 1;
    for(RG int i = 1; i <= mx; ++i) fac[i] = 1LL * i * fac[i - 1] % Zsy;
    inv[mx] = Pow(fac[mx], Zsy - 2);
    for(RG int i = mx - 1; ~i; --i) inv[i] = 1LL * inv[i + 1] * (i + 1) % Zsy;
    for(RG int i = 0; i <= mx; ++i){
        A[i] = B[i] = inv[i];
        B[i] = 1LL * B[i] * Pow(i, k) % Zsy;
        if(i & 1) A[i] = Zsy - A[i];
    }
    Mul(); RG int Inv = Pow(2, Zsy - 2);
    for(RG int i = 0, e = 1, x = n - 1, pw = Pow(2, n - 1); i <= mx; ++i, --x){
        Up(ans, 1LL * e * pw % Zsy * A[i] % Zsy);
        e = 1LL * e * x % Zsy;
        pw = 1LL * pw * Inv % Zsy;
    }
    ans = 1LL * n * Pow(2, 1LL * n * (n - 1) / 2 - n + 1) % Zsy * ans % Zsy;
    printf("%d\n", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/cjoieryl/p/8456959.html

时间: 2024-10-02 12:14:32

Bzoj5093: 图的价值的相关文章

[CF932E]Team Work &amp; [BZOJ5093]图的价值

CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac{n(n-1))}{2}-(n-1)}*\sum_{i=0}^{n-1}\binom{n-1}{i}i^k\) \(n\le10^9,k\le2*10^5\) 模\(998244353\) 第二类斯特林数 赶紧去学第二类斯特林数啊 第二类斯特林数:\(S(n,m)\),表示把\(n\)个不同的的球放

bzoj5093:图的价值(第二类斯特林数+NTT)

传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\)个点,且关于某个点连边的时候剩下的边都可以随便连,所以有前面的两个常数 所以真正要计算的是\[\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 根据第二类斯特林数的性质,有\[i^k=\sum_{j=0}^iS(k,j)\times j!\times C_i^j\] 然后带入,得\[\s

【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)

[BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1}^i·i^k·2^{\frac{n(n-1)}{2}}\] 因为有\(n\)个点,所以还要乘以一个\(n\) 所以,我们真正要求的就是: \[\sum_{i=0}^{n-1}C_{n-1}^i·i^k\] 怎么做? 看到了\(i^k\)想到了第二类斯特林数 \[m^n=\sum_{i=0}^{m}

【bzoj5093】[Lydsy1711月赛]图的价值(NTT+第二类斯特林数)

题意: 给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和. 现在计算所有\(n\)个点的简单无向图的价值之和. 思路: 将式子列出来: \[ \sum_{i=1}^n\sum_{j=0}^{n-1}{n-1\choose j}2^{\frac{(n-1)(n-2)}{2}}j^k \] 表示分别考虑每个点的贡献,我们只需要枚举其度数即可,其余的边任意连. 然后我们将后面的\(j^k\)用第二类斯特林数展开: \[ \begin{aligned} &\sum_{i=1}^{n

bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数

[Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 245  Solved: 128[Submit][Status][Discuss] Description “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为答案很大,请对998244353取模输出. Input 第一行包含两个正整数n,k(

bzoj 5093 图的价值 —— 第二类斯特林数+NTT

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\limits_{d=0}^{n-1} d^{k} * 2^{C_{n-1}^{2}} * C_{n-1}^{d} \) 使用 \( n^{k} = \sum\limits_{i=0}^{k} S(k,i) * i! *C_{n}^{i} \) 得到 \( ans = n * \sum\limits_{d

燃尽图做项目管理,你想了解的全部在这里

在运用敏捷的公司中,我们通常离在几米开外的地方就可以看到团队工作空间中有各种颜色的便笺,白板,各种图表等.在敏捷中我们称这些为信息发射源 Information Radiator. 它可以很好的用于项目的沟通.展示项目的状态.其中有一种弯曲的曲线,叫做:燃尽图,它在我们的项目中扮演着非常重要的角色,可以反映当前冲刺执行情况.进度及风险等.这也是每一位敏捷教练及团队成员都需要能"读懂"的图.那么问题来了: 何谓燃尽图? 如何画燃尽图? 常见的燃尽图有典型类型及反映出的问题.应对措施? 燃

带你了解燃尽图!!!

在运用敏捷的公司中,我们通常离在几米开外的地方就可以看到团队工作空间中有各种颜色的便笺,白板,各种图表等.在敏捷中我们称这些为信息发射源 Information Radiator. 它可以很好的用于项目的沟通.展示项目的状态.其中有一种弯曲的曲线,叫做:燃尽图,它在我们的项目中扮演着非常重要的角色,可以反映当前冲刺执行情况.进度及风险等.这也是每一位敏捷教练及团队成员都需要能“读懂”的图.那么问题来了: 何谓燃尽图?如何画燃尽图?常见的燃尽图有典型类型及反映出的问题.应对措施?燃尽图常见问题有哪

《大道至简》弟七八章读后感

第七章标题为现实中的软件工程,共分为四小节,标题分别为:1.大公司手中的算盘:2.回到工程的关键点:3.思考项目成本的经理:4.审视AOP:5.审视MDA/MDD.第八章分为七小节分别是:1.软件工程的三个要素的价值:2.其实RUP是一个杂物箱:3.UML与甲骨文之间的异同:4.  经营者离开发者很远,反之亦然:5.  矛盾:实现目标与保障质量:6.枝节与细节:7.灵活的软件工程. 在第七章第一小节中作者向我们介绍了IBM公司的发展状况,并由此讲到其他的大型软件公司,揭示了他们一面打压对手的优势