题目描述

求所有\(n\)个点带标号强连通竞赛图中哈密顿回路数量的平均值.

题解

因为要求平均数,所以我们可以把分母和分子单开来算。

\(n\)个点的所有竞赛图的所有哈密顿回路个数是可以求出来的,就是可以枚举所有哈密顿回路,然后考虑它在多少张竞赛图中出现过,也就是:
\[ ans=\frac{n!}{n}2^{\binom{n}{2}-n} \]
也就是我们钦定了一条哈密顿回路之后,有\(n\)条边就固定不能选了,其他的边还是可以随便选的。

由于竞赛图强连通是竞赛图具有哈密顿回路的充分必要条件。

所以我们现在的任务就是求\(n\)个点的强连通竞赛图的个数。

可以\(dp\)一下这个东西。
\[ f[i]=2^{\binom{i}{2}}-\sum_{j=1}^{j<i}f[j]\times \binom{i}{j}\times 2^{\binom{i-j}{2}} \]
相当于是用总数容斥掉不强连通的方案数,后面是相当于枚举当前图缩完\(SCC\)之后拓扑序最小的\(SCC\)的大小,然后其他边是可以随便连的。

这个东西可以直接把组合数拆开\(CDQ\)求。

我们可以设\(g[i]=2^{\binom{i}{2}}\)特殊的,我们令\(g[0]=1,g[1]=1​\)。
\[ f[i]=g[i]-\sum_{j=1}^{j<i}\frac{i!}{j!*(i-j)!}f[j]\times g[i-j] \]

\[ g[i]=\sum_{j=1}^{j\leq i}\frac{i!}{j!*(i-j)!}f[j]\times g[i-j] \]

\[ \frac{g[i]}{i!}=\sum_{j=1}^{j\leq i}\frac{f[j]}{j!}\times \frac{g[i-j]}{(i-j)!} \]

这时我们可以令\(G[i]=\frac{g[i]}{i!},F[i]=\frac{f[i]}{i!}\),所以我们的形式变成了:
\[ G[i]=\sum_{j=1}^{j \leq i}F[j]*G[j-i] \]
然后根据分治\(FFT\)转多项式求逆的方法,可以表示为。
\[ F*G+G_0=G \]

\[ G=\frac{G_0}{1-F} \]

\[ F=1-\frac{G_0}{G} \]

然后就可以多项式求逆做了。

但是我感觉这样的话常数项好像不太对,但是这道题可以把前两项判掉,所以就无关紧要了。

代码

#include<iostream>
#include<cstdio>
#define N 270009
using namespace std;
typedef long long ll;
const ll G=3;
const int Gi=332748118;
const ll mod=998244353;
ll g[N],b[N],c[N],jie[N],ni[N];
int rev[N],n;
inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x;
}
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline void MOD(int &x){x=x>=mod?x-mod:x;}
inline ll power(ll x,ll y){ll ans=1;while(y){if(y&1)ans=ans*x%mod;x=x*x%mod;y>>=1;}return ans;
}
inline ll gi(ll x){return power(x,mod-2);}
inline ll C2(ll n){return n*(n-1)/2;}
inline void NTT(ll *a,int l,int tag){for(int i=1;i<l;++i)if(i>rev[i])swap(a[i],a[rev[i]]);for(int i=1;i<l;i<<=1){ll wn=power(tag==1?G:Gi,(mod-1)/(i<<1));for(int j=0;j<l;j+=(i<<1)){ll w=1;for(int k=0;k<i;++k,w=w*wn%mod){ll x=a[j+k],y=a[i+j+k]*w%mod;MOD(a[j+k]=x+y);MOD(a[i+j+k]=x-y+mod);}}}if(tag<0){ll ny=power(l,mod-2);for(int i=0;i<l;++i)a[i]=a[i]*ny%mod;}
}
void getinv(ll *a,int len){if(len==1){b[0]=power(a[0],mod-2);return;}getinv(a,(len+1)>>1);int l=1,L=0;while(l<=(len<<1))l<<=1,L++;for(int i=1;i<l;++i)rev[i]=rev[i>>1]>>1|((i&1)<<(L-1));for(int i=0;i<len;++i)c[i]=a[i];for(int i=len;i<l;++i)c[i]=0;NTT(c,l,1);NTT(b,l,1);for(int i=0;i<l;++i)b[i]=(2ll-c[i]*b[i]%mod+mod)*b[i]%mod;NTT(b,l,-1);for(int i=len;i<l;++i)b[i]=0;
}
int main(){n=rd();jie[0]=1;for(int i=1;i<=n;++i)jie[i]=jie[i-1]*i%mod;ni[n]=power(jie[n],mod-2);for(int i=n-1;i>=0;--i)ni[i]=ni[i+1]*(i+1)%mod;g[0]=1;g[1]=1;for(int i=2;i<=n;++i)g[i]=power(2,C2(i))*ni[i]%mod;getinv(g,n+1);for(int i=0;i<=n;++i)b[i]=(mod-b[i])*jie[i]%mod;if(n>=1)puts("1");if(n>=2)puts("-1");for(int i=3;i<=n;++i){ll num=jie[i]*gi(i)%mod*power(2,C2(i)-i)%mod;printf("%lld\n",num*gi(b[i])%mod);}return 0;
}

转载于:https://www.cnblogs.com/ZH-comld/p/10592125.html

LuoguP4233 射命丸文的笔记相关推荐

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

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

  2. P4233 射命丸文的笔记

    P4233 射命丸文的笔记 官方题解 题意 如果一个竞赛图含有哈密顿回路,则称这张竞赛图为值得记录的 从所有含有n个顶点(顶点互不相同)的,值得记录的竞赛图中等概率随机选取一个 求选取的竞赛图中哈密顿 ...

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

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

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

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

  5. luogu P4233 射命丸文的笔记

    题意: 给出nnn,求对于任意的1≤i≤n" role="presentation" style="position: relative;">1 ...

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

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

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

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

  8. 洛谷P4233 射命丸文的笔记 【多项式求逆】

    题目链接 洛谷P4233 题解 我们只需求出总的哈密顿回路个数和总的强联通竞赛图个数 对于每条哈密顿回路,我们统计其贡献 一条哈密顿回路就是一个圆排列,有\(\frac{n!}{n}\)种,剩余边随便 ...

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

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

最新文章

  1. Sublime Text安装与使用
  2. 用 javascript 获取当页面上鼠标(光标)位置
  3. mysql之间互相订阅_mysql – 开票和订阅的应用程序逻辑?
  4. net Core做一个webApi的简单实例
  5. java - 水仙花数
  6. Windows下将jar包封装成服务程序
  7. sqlserver 获取当前操作的数据库名称
  8. 毕设题目:Matlab语音处理
  9. ajax打开新窗口被浏览器拦截的解决办法
  10. HTML概述+HTML核心(HTML知识点总结)
  11. Win7安全模式卡在ClassPNP sys位置解决办法之一
  12. 我的NVIDIA开发者之旅——NVIDIA云原生技术
  13. TVS管好,还是稳压二极管好?
  14. python海龟绘图教程自学网_通过海龟绘图学习Python-01
  15. 9 输入输出设备题库
  16. Java入门第一步---配置环境、安装工具(超级详细)
  17. Ubuntu USB设备端口号绑定
  18. 常见硬件接口汇总(未完待续)
  19. 第八届蓝桥杯 拉马车JAVA暴解
  20. 尚学堂Java学习日记Day3

热门文章

  1. 切换输入法快捷键_输入法失灵怎么办?该怎么恢复?
  2. 设计模式 可复用面向对象软件的基础_面向对象的可复用设计模式之简单工厂模式(1/24)...
  3. 聚奎中学2021高考成绩查询,江津2017全体高考考生的喜报
  4. 【编程题】判断一个整数对应的二进制数是否是回文
  5. 理解主从设备模式(Master-Slave)
  6. 2021秋季跳槽必备:软件测试面试题(附带答案)备战金九银十!
  7. linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
  8. dump排查内存异常 java_如何排查Java应用内存泄漏问题
  9. layui tree ajax刷新,layer 刷新某个页面的实现方法
  10. 小分子php蛋白,如何研究小分子抑制蛋白降解途径? - 分子生物 - 小木虫 - 学术 科研 互动社区...