[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类型与口袋 ...
随机推荐
- Hybrid App 技术路径带动性能的提升
说到 Hybrid App(混合应用)大家都不陌生,因为这种开发模式大行其道发展的这些年取代了很多原生和 Web 应用,为什么大家对这种「Native + HTML5」的开发模式额外偏爱呢? 因为一方 ...
- [ABC131E] Friendships
2023-01-30 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 找规律,构造 解题思路 先构造一个菊花图为最大边的图,再依次连边减小k. ...
- 三维模型OSGB格式轻量化的跨平台兼容性技术分析
三维模型OSGB格式轻量化的跨平台兼容性技术分析 在三维模型应用中,OSGB格式轻量化处理是一种常见的技术手段,可以通过数据压缩.简化.滤波等操作,降低三维模型数据的存储空间和传输带宽需求,提高应用程 ...
- 【Visual Studio 使用技巧分享】任务列表的使用
前言 Visual Studio 开发工具的熟练使用,能够潜在的提升我们工作效率,而且一些开发技巧的使用,会让我们的工作显得那么方便快捷.那么你知道VS中有哪些你不知道的使用小技巧呢?接下来,我们就来 ...
- QA|4个数据打开了4个页面,怎么实现只打开一个页面?单例模式|网页计算器自动化测试实战
如下图,代码中4个数据,产生了4个页面,怎么实现只打开一个页面?可使用单例模式 查询得知 单例模式实现有5种方法,参照链接下: https://blog.csdn.net/SixStar_FL/art ...
- 对比 MyBatis 和 MyBatis-Plus 批量插入、批量更新的性能和区别
1 环境准备 demo 地址:learn-mybatis · Sean/spring-cloud-alibaba - 码云(gitee.com) 1.1 搭建 MyBatis-Plus 环境 创建 m ...
- 初露头角!Walrus入选服贸会“数智影响力”数字化转型创新案例
9月5日,由北京市通信管理局.工业和信息化部新闻宣传中心联合主办的"企业数字化转型论坛"在2023中国国际服务贸易交易会期间召开,论坛以"数字化引领 高质量发展" ...
- MySQL运维1-日志
一.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当MySQL启动和停止时,以及服务器在运行过程中发生的任何严重错误时的相关信息,当数据库出现任何故障导致无法正常使用时,建议首先查看此日志 ...
- Springboot+Guava实现单机令牌桶限流
令牌桶算法 系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时 ...
- .NET应用如何防止被反编译
前言 前段时间分享了两篇关于.NET反编译相关的文章,然后文章留言区就有小伙伴提问:如何防止被反编译?因此本篇文章我们就来讲讲.NET应用如何防止被反编译..NET反编译相关的文章可以看如下文章: 4 ...