当前位置: 首页 > news >正文

题解: P4233 射命丸文的笔记

题目简意

求强连通竞赛图的个数和从中哈密顿回路的个数。

solution

很容易求出强连通竞赛图中哈密顿回路的个数。
因为点标号不同的也算一条,所以一共有\((n-1)!\)条哈密顿回路。
你想啊,你就单拎出一条哈密顿回路,从中有\(n\)条边,剩下的边随便连,就有\(2^{C_n^2-n}\)中情况。
根据乘法原理,那么哈密顿回路的个数就是\((n-1)! \times 2^{C_n^2-n}\)
然后是强连通竞赛图的个数。
\(f_i\)表示\(i\)个点组成强连通竞赛图的个数。
你会发现正着直接统计比较难做,所以你考虑反着做。
\(f_i=竞赛图数-非强连通竞赛图数\)
非强连通竞赛图,缩完点后一定不是一个点。枚举\(1\)所在的强连通分量的大小\(j\),所以动态转移方程是
\(f_i=2^{C_i^2} - \sum_j^{i-1} f_j \times C_i^j \times 2^{C_{i-j}^2}\)
中间的 \(C_i^j\) 是不是看起来很难看,所以我们把它展开 \(C_i^j= \frac{jc_i}{jc_j \times jc_{i-j}}\)\(jc_i=i!\)
\(f_i=2^{C_i^2} - \sum_j^{i-1} f_j \times \frac{jc_i}{jc_j \times jc_{i-j}} \times 2^{C_{i-j}^2}\)
\(f_i=2^{C_i^2} - jc_i \times \sum_j^{i-1} f_j \times \frac{1}{jc_j \times jc_{i-j}} \times 2^{C_{i-j}^2}\)
\(f_i=2^{C_i^2} - jc_i \times \sum_j^{i-1} \frac{f_j}{jc_j} \times \frac{2^{C_{i-j}^2}}{jc_{i-j}}\)
就直接套分治\(ntt\)就解决了。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353,G=3;
int n,rev[300005],jc[100005],f[100005],inv[100005];
int a[300005],b[300005];
int ksm(int a,int b)
{int re=1;while(b){if(b&1)re=re*a%mod;a=a*a%mod;b>>=1;}return re;
}
void ntt(int limit,int *a,int op)
{for(int i=0;i<limit;i++)if(rev[i]>i)swap(a[i],a[rev[i]]);for(int len=2;len<=limit;len<<=1){int wn=ksm(G,(mod-1)/len);if(op==-1)wn=ksm(wn,mod-2);for(int l=0;l+len-1<=limit;l+=len){int w0=1;for(int i=0;i<(len>>1);i++,w0=w0*wn%mod){int a0=a[i+l],a1=a[i+l+(len>>1)]*w0%mod;a[i+l]=(a0+a1)%mod;a[i+l+(len>>1)]=(a0+mod-a1)%mod;}}}
}
void cdq(int l,int r)
{if(l==r)return;int mid=l+r>>1,limit=1,cnt=0;cdq(l,mid);while(limit<=r-l)limit<<=1,cnt++;for(int i=0;i<limit;i++){rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));a[i]=b[i]=0;}for(int i=l;i<=mid;i++)a[i-l]=f[i]*inv[i]%mod;for(int i=0;i<=r-l;i++)b[i]=ksm(2,(i-1)*i/2)*inv[i]%mod;ntt(limit,a,1),ntt(limit,b,1);for(int i=0;i<limit;i++)a[i]=a[i]*b[i]%mod;ntt(limit,a,-1);int h=ksm(limit,mod-2);for(int i=mid+1;i<=r;i++)f[i]=(f[i]+mod-a[i-l]*h%mod*jc[i]%mod)%mod;cdq(mid+1,r);
}
signed main()
{scanf("%lld",&n),jc[0]=inv[0]=1;for(int i=1;i<=n;i++){jc[i]=jc[i-1]*i%mod;f[i]=ksm(2,(i-1)*i/2);inv[i]=ksm(jc[i],mod-2);}cdq(1,n);for(int i=1;i<=n;i++){if(i==1)printf("1\n");else if(i==2)printf("-1\n");else {int tot=jc[i-1]*ksm(2,(i-1)*i/2-i)%mod;printf("%lld\n",tot*ksm(f[i],mod-2)%mod);}}return 0;
}
http://www.jsqmd.com/news/418124/

相关文章:

  • SHMEM:CANN多设备高性能通信库正式开源
  • 260205
  • CiteLLM An Agentic Platform for Trustworthy Scientific Reference Discovery
  • LeetCode 393 UTF-8 编码验证
  • 鸿蒙应用如何高效管理后台任务,避免 CPU 资源浪费
  • D.二分查找-二分答案-其他——374. 猜数字大小
  • 大数据架构数据并行处理:任务拆分与负载均衡
  • 大数据领域中内存计算的网络传输优化
  • 有哪些靠谱的开题报告写作网站推荐
  • 好用的免费ai论文写作生成器(在线ai论文写作生成器)
  • 推荐几款知名的ai论文写作软件品牌
  • Netty中的ByteBuf
  • 记事本
  • 2/26
  • 2/27
  • 朱梁真理函数定理:世界观、人生观、价值观
  • AT_arc207_a [ARC207A] Affinity for Artifacts
  • Abaqus中接触分析(显示求解 Explicit)
  • 用C语言生成H5文件步骤
  • 题解:P9531 [JOIST 2022] 复兴计划 / Reconstruction Project
  • 贾子周期四阶段律理论解析 |Analysis of Kucius Four-Stage Cycle Law
  • DeepSeek总结PostgreSQL存储体系的核心单元——8KB大小的数据页
  • SQL Server删除正在恢复数据库方法
  • 2026年中医就诊能用医保吗?使用条件及报销要点 - 品牌排行榜
  • 2026年操作简单使用方便且安全的染发膏推荐 - 品牌排行榜
  • CLI Test Post Angular - 智造出海
  • 2026年固生堂工作怎么样?内部视角解析职业发展与环境 - 品牌排行榜
  • Bitwarden+cpolar 让密码管理随时随地更安心
  • 2026广东最新沉香手串供应链优选指南 十大品质生产厂家参考 - 十大品牌榜
  • 2026执业药师备考指南:基础薄弱考生专属的三大靠谱网课推荐! - 医考机构品牌测评专家