1 条题解

  • 0
    @ 2025-8-24 22:14:44

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar zhoukangyang
    ^w^/

    搬运于2025-08-24 22:14:44,当前版本为作者最后更新于2021-08-28 20:06:10,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    大家的做法都用了拉反,给个不用拉反的做法。

    考虑容斥:钦定边集 SS,满足 SS 中的边都是割边。

    最终的图一定是若干个联通块由 SS 中的边连成的。若把联通块看做点,那么最终的图就是一颗树。

    直接做不好做,因此更换枚举顺序。先枚举连通块(设大小分别为 a1,a2,...,ama_1,a_2,...,a_m),再枚举 SS。根据一个经典结论,取 SS 的方案数是 nm2ain^{m-2} \prod a_i。带上容斥系数就是 1n2(nai)-\frac{1}{n^2} \prod (-na_i)

    有标号连通图EGF\rm EGFHH。那么设 G(x)G(x) 满足 Gi=niHiG_i = -niH_i,答案就是 [xn]n!n2eG[x^n]-\frac{n!}{n^2} e^{G}

    核心代码:

    cin >> n;
    poly F (n + 1);
    F[0] = 1;
    L(i, 1, n) F[i] = (ll) F[i - 1] * qpow (2, i - 1) % mod * inv[i] % mod;
    F = F.Ln();
    L(i, 1, n) F[i] = mod - (ll) F[i] * i % mod * n % mod;
    F = F.Exp();
    cout << (ll) (mod - F[n]) * inv[n] % mod * fac[n - 1] % mod << "\n";
    
    • 1

    信息

    ID
    4828
    时间
    4000ms
    内存
    500MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者