[ABC327G] Many Good Tuple Problems
题目链接
简化题意:有一个 \(n\) 个点的图,问有多少个长度为 \(M\) 的边序列,满足连边后图是二分图。
\(n\le 30,m\le 10^9\)
考虑先强制要求无重边。
定义 \(f_{i,j}\) 为 \(i\) 个点,\(j\) 条边的图的二分图染色数量(染色方式不同算多次)。这个是可以通过枚举黑色点的数量算出来。
然后定义 \(g_{i,j}\) 为 \(i\) 个点,\(j\) 条边的连通图的二分图染色数量。\(g_{i,j}\) 等于 \(f_{i,j}\) 减去不连通的数量,枚举 \(1\) 号点的连通块大小 \(k\) 和边数 \(a\),然后 \(g_{i,j}\) 减去 \(g_{k,a}\times f_{i-k,j-a}\times \binom{i-1}{k-1}\).
\(g_{i,j}\) 除以2就是 \(i\) 个点,\(j\) 条边连通二分图数量,然后要求出 \(dp_{i,j}\) 为 \(i\) 个点, \(j\) 条边二分图数量,也是枚举 \(1\) 号点连通块大小 \(k\) 和边数 \(a\),\(dp_{i,j}\) 加上 \(g_{k,a}\times dp_{i-k,j-a}\times \binom{i-1}{k-1}\)。
最后要求序列数量,枚举他用了 \(k\) 种边,容斥掉用了不到 \(k\) 种边的情况就行了。
#include<bits/stdc++.h>
using namespace std;
const int N=35,P=998244353,M=1e6+5;
int n,m,g[N][N*N],f[N][N*N],dp[N][N*N],jc[M],iv[M],inv[M],ans;
int C(int n,int m)
{
if(n<m)
return 0;
return 1LL*jc[n]*iv[m]%P*iv[n-m]%P;
}
int pown(int x,int y)
{
if(!y)
return 1;
int t=pown(x,y>>1);
if(y&1)
return 1LL*t*t%P*x%P;
return 1LL*t*t%P;
}
int main()
{
iv[0]=iv[1]=inv[1]=jc[0]=jc[1]=1;
for(int i=2;i<M;i++)
{
jc[i]=jc[i-1]*1LL*i%P;
inv[i]=1LL*(P-P/i)*inv[P%i]%P;
iv[i]=1LL*iv[i-1]*inv[i]%P;
}
scanf("%d%d",&n,&m);
f[1][0]=g[1][0]=2;
for(int i=2;i<=n;i++)
{
for(int j=0;j<=i*(i+1)/4;j++)
{
for(int k=0;k<=i;k++)
(g[i][j]+=1LL*C(k*(i-k),j)*C(i,k)%P)%=P;
f[i][j]=g[i][j];
for(int k=1;k<i;k++)
{
for(int b=0;b<=k*(k+1)/4&&b<=j;b++)
{
f[i][j]+=P-1LL*f[k][b]*g[i-k][j-b]%P*C(i-1,k-1)%P;
f[i][j]=f[i][j]>=P? f[i][j]-P:f[i][j];
}
}
}
}
for(int i=1;i<=n;i++)
for(int j=0;j<=i*(i+1)/4;j++)
f[i][j]=f[i][j]&1? f[i][j]+P>>1:f[i][j]>>1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=i*(i+1)/4;j++)
{
dp[i][j]=f[i][j];
for(int k=1;k<i;k++)
{
for(int b=0;b<=k*(k+1)/4&&b<=j;b++)
{
dp[i][j]+=1LL*f[k][b]*dp[i-k][j-b]%P*C(i-1,k-1)%P;
dp[i][j]=dp[i][j]>=P? dp[i][j]-P:dp[i][j];
}
}
}
}
for(int i=0;i<=n*(n+1)/4;i++)
{
int ret=0;
for(int j=0;j<=i;j++)
(ret+=pown(j,m)*1LL*C(i,j)%P*(i-j&1? P-1:1)%P)%=P;
// printf("%d %d %d\n",i,dp[n][i],ret);
(ans+=1LL*ret*dp[n][i]%P)%=P;
}
printf("%d",ans*1LL*pown(2,m)%P);
}
[ABC327G] Many Good Tuple Problems的更多相关文章
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]Contents
I find it may cost me so much time in doing such solutions to exercises and problems....I am sorry t ...
- python开发基础(二)运算符以及数据类型之tuple(元组)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python一对一教程:Computational Problems for Physics chapter 1 Code Listings
作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 . 本博客为一对一辅导学生python代码的教案, 获得学生允许公开. 具体辅导内容为<Computati ...
- 【.NET深呼吸】元组数据(Tuple)
各位观众,大家好,欢迎收看由火星电视台直播的<老周吹牛>节目,注意:本节目没有任何技术含量,如果您没有兴趣,请砸掉电视机. 今天说一下System命名空间下的一个数据类型——Tuple,翻 ...
- python之最强王者(7)——元组(tuple)
1.序列(sequence): 说明:在前面的字符串列表中其实我们已经用到了序列,之所以放到这篇来讲主要是为了承上启下,方便理解和记忆. python的数据访问模型:直接存取 ,序列 ,映射 对非容器 ...
- tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...
- list,tuple,dict,set常用方法
Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- c# 元组Tuple
Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存放各种东西的收集箱.C# 4.0引入的一个新特性 Tuple类型与口袋 ...
随机推荐
- Docker容器怎么安装Vim编辑器
在现代软件开发和系统管理中,Docker已经成为一个不可或缺的工具.它允许我们轻松地创建.部署和运行应用程序,以及构建可移植的容器化环境.然而,在Docker容器中安装特定的工具可能会有一些挑战, ...
- 如何通过抖音订单API接口获取订单详情
要通过抖音订单API接口获取订单详情,您需要进行以下步骤: 1.获取Access Token:使用APP ID和APP Secret调用获取Access Token API接口来获取您的Access ...
- Ipa打包并安装到iphone
手动运行篇: 在真机上运行appium会进行闪退,因为我们的真机是不合法的真机,怎么样才能合法呢,要注册我们的设备才行 要对app进行打包,要先进行签名,要签名,就需要证书,证书可以自己伪造,但是这一 ...
- 杰哥教你面试之一百问系列:java中高级多线程concurrent的使用
目录 问题1:什么是ConcurrentHashMap?它与HashMap的区别是什么? 问题2:什么是CopyOnWriteArrayList?它适用于什么样的场景? 问题3:什么是Blocking ...
- KRPANO资源分析工具下载720THINK全景图
提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...
- 兴达易控modbus转profinet网关三菱变频器通讯
兴达易控modbus转profinet网关与三菱变频器通讯 本案例分享兴达易控modbus转profinet网关(MDPN100)连接西门子1200plc,实现三菱变频器485通讯兼容转modbusT ...
- 我封装的一个REPR轮子 Biwen.QuickApi
Biwen.QuickApi 项目介绍 [QuickApi("hello/world")] public class MyApi : BaseQuickApi<Req,Rsp ...
- Vitess全局唯一ID生成的实现方案
为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键. 但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足 ...
- 一些常见小程序的UI设计分享
外卖优惠券小程序的UI设计 电子商城系统UI分享 A B C
- 算法解析:LeetCode——机器人碰撞和最低票价
摘要:本文由葡萄城技术团队原创.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 机器人碰撞 问题: 现有 n 个机器人,编号从 1 开始,每个机器人包含在路 ...