题目链接

洛谷P4233

题解

我们只需求出总的哈密顿回路个数和总的强联通竞赛图个数

对于每条哈密顿回路,我们统计其贡献
一条哈密顿回路就是一个圆排列,有\(\frac{n!}{n}\)种,剩余边随便连
所以总的贡献为
\[(n - 1)!2^{{n \choose 2} - n}\]

我们只需求出总的强联通竞赛图的个数
设\(g[n]\)表示\(n\)个点竞赛图个数,\(f[n]\)表示强联通竞赛图个数
那么有
\[g[n] = \sum\limits_{i = 1}^{n}{n \choose i}f[i]g[n - i]\]

\[\frac{g[n]}{n!} = \sum\limits_{i = 1}^{n}\frac{f[i]}{i!}\frac{g[n - i]}{(n - i)!}\]
设\(G(x)\)和\(F(x)\)分别为其指数型生成函数
那么有
\[G(x) = F(x)G(x) + 1\]

\[F(x) = \frac{G(x) - 1}{G(x)}\]
多项式求逆即可
复杂度\(O(nlogn)\)

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
using namespace std;
const int maxn = 400005,maxm = 100005,INF = 0x3f3f3f3f;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}return flag ? out : -out;
}
const int P = 998244353,G = 3;
inline int qpow(int a,LL b){int re = 1;for (; b; b >>= 1,a = 1ll * a * a % P)if (b & 1) re = 1ll * re * a % P;return re;
}
inline LL C(int n){return 1ll * n * (n - 1) / 2;}
int R[maxn];
void NTT(int* a,int n,int f){for (int i = 0; i < n; i++) if (i < R[i]) swap(a[i],a[R[i]]);for (int i = 1; i < n; i <<= 1){int gn = qpow(G,(P - 1) / (i << 1));for (int j = 0; j < n; j += (i << 1)){int g = 1,x,y;for (int k = 0; k < i; k++,g = 1ll * g * gn % P){x = a[j + k],y = 1ll * g * a[j + k + i] % P;a[j + k] = (x + y) % P,a[j + k + i] = ((x - y) % P + P) % P;}}}if (f == 1) return;int nv = qpow(n,P - 2); reverse(a + 1,a + n);for (int i = 0; i < n; i++) a[i] = 1ll * a[i] * nv % P;
}
int A[maxn],B[maxn],c[maxn],ans,N,fac[maxn],inv[maxn],fv[maxn];
void init(){fac[0] = fac[1] = inv[0] = inv[1] = fv[0] = fv[1] = 1;for (int i = 2; i <= N; i++){fac[i] = 1ll * fac[i - 1] * i % P;inv[i] = 1ll * (P - P / i) * inv[P % i] % P;fv[i] = 1ll * fv[i - 1] * inv[i] % P;}
}
void Inv(int deg,int* a,int* b){if (deg == 1){b[0] = qpow(a[0],P - 2); return;}Inv((deg + 1) >> 1,a,b);int L = 0,n = 1;while (n < (deg << 1)) n <<= 1,L++;for (int i = 1; i < n; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));for (int i = 0; i < deg; i++) c[i] = a[i];for (int i = deg; i < n; i++) c[i] = 0;NTT(c,n,1); NTT(b,n,1);for (int i = 0; i < n; i++)b[i] = 1ll * ((2ll - 1ll * c[i] * b[i] % P) + P) % P * b[i] % P;NTT(b,n,-1);for (int i = deg; i < n; i++) b[i] = 0;
}
int main(){N = read(); init();for (int i = 0; i <= N; i++) A[i] = 1ll * qpow(2,C(i)) * fv[i] % P;Inv(N + 1,A,B);A[0] = 0;int n = 1,L = 0;while (n <= (N << 1)) n <<= 1,L++;for (int i = 1; i < n; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));NTT(A,n,1); NTT(B,n,1);for (int i = 0; i < n; i++) A[i] = 1ll * A[i] * B[i] % P;NTT(A,n,-1);REP(i,N){if (i == 1) puts("1");else if (i == 2) puts("-1");else printf("%lld\n",1ll * fac[i - 1] * qpow(2,C(i) - i) % P * qpow(1ll * A[i] * fac[i] % P,P - 2) % P);}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9282436.html

洛谷P4233 射命丸文的笔记 【多项式求逆】相关推荐

  1. 洛谷 P4233 射命丸文的笔记 题解

    题目传送门 题目大意: 求 nnn 个点的强连通竞赛图中的哈密顿回路的期望个数. 题解 答案需要求期望个数,那么只需要求出总的哈密顿回路个数除以强联通竞赛图个数即可. 设 s[i]s[i]s[i] 表 ...

  2. [洛谷P4233]射命丸文的笔记

    [题目大意] 如果一个竞赛图含有哈密顿回路,则称这张竞赛图为值得记录的 从所有含有nnn个顶点(顶点互不相同)的,值得记录的竞赛图中等概率随机选取一个 求选取的竞赛图中哈密顿回路数量的期望 输出答案除 ...

  3. 【LuoguP4233】射命丸文的笔记-多项式求逆

    测试地址:射命丸文的笔记 做法:本题需要用到多项式求逆. 首先,要求存在哈密顿回路的竞赛图的哈密顿回路期望数量,就是用哈密顿回路的总数除以存在哈密顿回路的竞赛图数量. 要考虑所有竞赛图的哈密顿回路数量 ...

  4. 洛谷P4239 【模板】多项式求逆(加强版)(多项式求逆)

    传送门 咱用的是拆系数\(FFT\)因为咱真的不会三模数\(NTT\)-- 简单来说就是把每一次多项式乘法都改成拆系数\(FFT\)就行了 如果您还不会多项式求逆的左转->这里 顺带一提,因为求 ...

  5. 洛谷 P4233 射命丸文的笔记 ntt

    题目背景 (七)再见,地底世界的朋友们 在地灵殿住了许多天了呢. 这些日子里,觉分享了很多旧地狱的故事. 此次地底旅行,可以说是非常充实了. 虽然仍旧有些不舍,不过人类总是要见太阳的,再说这样麻烦觉姐 ...

  6. 洛谷P4233 射命丸文的笔记 分治NTT+竞赛图

    Description 给定n 对于i从1~n,输出i个点组成竞赛图中,哈密顿回路的平均数量 Solution 竞赛图存在哈密顿回路的充要条件就是强连通 设f(n)f(n)f(n)表示n个点形成强连通 ...

  7. 洛谷P4238 【模板】多项式求逆(NTT)

    传送门 学习了一下大佬的->这里 已知多项式$A(x)$,若存在$A(x)B(x)\equiv 1\pmod{x^n}$ 则称$B(x)$为$A(x)$在模$x^n$下的逆元,记做$A^{-1} ...

  8. 【洛谷P4233】— 射命丸文的笔记(竞赛图+多项式求逆)

    传送门 考虑强连通竞赛图哈密顿回路总数很好求 为(n−1)!2(n2)−n(n-1)!2^{{n\choose 2}-n}(n−1)!2(2n​)−n 现在问题是求强连通竞赛图数 设fif_ifi​为 ...

  9. 洛谷P5050 【模板】多项式多点求值

    传送门 人傻常数大.jpg 因为求逆的时候没清零结果调了几个小时-- 前置芝士 多项式除法,多项式求逆 什么?你不会?左转你谷模板区,包教包会 题解 首先我们要知道一个结论\[f(x_0)\equiv ...

最新文章

  1. 网络游戏性能测试的几点想法
  2. 内核功能导致重启_诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题
  3. 验证输入的是否数字的几种方法
  4. Markdown中数学公式整理
  5. Spring校验@RequestParams和@PathVariables参数
  6. Python-Flask实现电影系统管理后台
  7. 计算机科学与技术专业可以转哪些专业,计算机科学与技术学院本科生转专业实施细则...
  8. 如何减少mysql的连接时间_mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案...
  9. css 绝对定位底部居中,css – 在另一个元素的中心下方水平居中绝对定位元素
  10. 大数据时代的呼叫中心客服运营管理
  11. 10、网友问答之串口字节方式传递单精度数--------labview宝典
  12. mysql 开源监控软件_开源MySQL_Monito 图形可视化监控工具
  13. 扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解
  14. 树莓派+摄像头实现监控功能
  15. WPF动画——故事板(Storyboard)
  16. layim之刷新好友列表
  17. sqlmap tamper mysql_sqlmap之常用tamper脚本
  18. 光电池和光电二极管的区别
  19. 基于Matlalb使用惯性传感器融合和MPU9250估计方向(附源码)
  20. idea提示java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: NO)

热门文章

  1. ArcGIS教程:曲率
  2. 笔记本选购2018.9
  3. FPGA接口-PMOD,FMC与SYZYGY
  4. C#汽车租凭(面对对象(封装、继承,多态的应用))
  5. Django的安装及第一个demo
  6. 一语中的丨高对抗重实战攻防视角下,企业安全运营到底该怎么做?
  7. 毕业设计 : 基于深度学习的口罩佩戴检测【全网最详细】 - opencv 卷积神经网络 机器视觉 深度学习
  8. 精准营销中的价值与实现—银行案例
  9. 如何破解类似于简书登录的滑动式验证码
  10. orcale报错 无效数字