cojs QAQ的图论题 题解报告
话说这个题目应该叫做 斯特林数的逆袭 QAQ
先说一说部分分的算法
1、n<=5 直接暴力搜索就可以了
2、k=0的时候不难发现任意一张图的价值都是n,问题转化为计算有多少种图,显然是2^C(n,2)
3、k=1的时候不难发现任意一张图的价值都是其度数的和,暴力1->10的n不难发现规律QAQ
4、实际上3的算法的规律会启发我们想到这个算法,不难发现每个点的度数的贡献都是独立的
不妨每一个点度数恰好为i的方案数并且计算贡献就可以了QAQ
当前点度数为i,则显然他要向i个点连边,可连边的点一共有(n-1)个
其余(n-1)个点之间随意连边
不难得到贡献为C(n-1,i)*i^k*2^C(n-1,2)
然后考虑每个点实际上都是等价的,可以得到ans=sigma(C(n-1,i)*i^k)*n*2^C(n-1,2)
然后预处理阶乘和阶乘的逆元,可以在O(n)时间内计算答案
这样加起来就有50分辣
5、我们考虑这个式子是否可以化简
注意到i^k=sigma(S(k,j)*j!*C(i,j))
从组合数学的角度理解就是i^k实际上是在i个数中可重选取k个数的方案
我们考虑选取的这k个数都是哪些数,不妨枚举j
那么把k个数分给j个集合就是第二类斯特林数,集合有序所以乘以j!
最后乘以在i个数中选取j个数的方案C(i,j)就可以得到这个式子
之后展开式子,把C(n-1,i)和C(i,j)*j!合并可以得到
ans=sigma((S(k,j)*(n-1)*(n-2)……*(n-j)*sigma(C(n-j-1,i-j))*n*2^C(n-1,2)
不难发现sigma(C(n-j-1,i-j))=2^(n-j-1)
所以计算这个式子我们只需要枚举j就可以了,我们会惊奇的发现这样时间复杂度是O(k)的
然后暴力计算斯特林数的时间复杂度是O(k^2)
总时间复杂度O(k^2),这样结合前面的算法就有70分了
6、考虑时间复杂度的瓶颈在于计算斯特林数
而我们实际上只是求第k行的斯特林数就可以了
我们知道斯特林数的通项公式是
S(n,m)=1/m!*sigma((-1)^k*C(m,k)*(m-k)^n)
从容斥的角度解释的话我们会发现我们有m个盒子,n个元素
可以有空盒的方案实际上是m^n
考虑到条件是不可以有空盒所以我们可以利用容斥原理
枚举至少有k个空盒,其余的盒子任意装,方案为C(m,k)*(m-k)^n
然后套上容斥系数就可以了,注意这里的盒子是无序的,所以我们最后还要消序QAQ
不难发现这个式子是一个卷积形式,我们利用这个式子构造多项式并做FFT
就可以在O(klogk)的时间内求出第k行的所有斯特林数了
时间复杂度O(klogk) QAQ 这样我们就圆满的解决这道题目了
cojs QAQ的图论题 题解报告的更多相关文章
- cojs 简单的01串 题解报告
题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...
- cojs 简单的数位DP 题解报告
首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...
- cojs 强连通图计数1-2 题解报告
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...
- cojs 二分图计数问题1-3 题解报告
OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...
- cogs 自己出的题目 题解报告
第一题很简单嘛,就是裸的动态树分治嘛 对于每一层的重心维护子树路径的信息和子树到上一层重心的点的信息 空间复杂度O(nlogn) 对于每一层我们按dis排序,之后记录军队数量的前缀和 查询的时候我们只 ...
- csu 1978: LXX的图论题
1978: LXX的图论题 Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 71 ...
- CFEducational Codeforces Round 66题解报告
CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...
- CF Round #580(div2)题解报告
CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
随机推荐
- 【EF Code First】 一对多、多对多的多重关系配置
这里使用用户表(User)和项目(Project)表做示例 有这样一个需求: 用户与项目的关系是:一个用户可以发多个项目,可以参加多个项目,而项目可以有多个参与成员和一个发布者 [其中含1-n和n-n ...
- GPIO初始化之PB3/PB4/PA13/PA14/PA15引脚的复用--寄存器版本
为了节省IO资源单片机会在一个IO上复用很多功能,一般的单片机用到 一个功能后就能再用两外复用的功能了,这就体现出了STM32 GPIO的强大功能了,我们用重映射的方法把其中一个外设映射到其他IO脚上 ...
- < java.util >-- List接口
List本身是Collection接口的子接口,具备了Collection的所有方法.现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点. List:有序 ...
- C++中复制构造函数与重载赋值操作符总结
前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...
- Teamwork——Week4 团队项目之NABC
项目框架——NABC模型 一.N(Need需求) 我们组主要的用户对象是第三小组——UI小组的同学们,因此我们的用户需求就是他们的数据需求. 1)提供给UI小组整理好的数据库,和前一组讨论好数据结构. ...
- mysql字符集基础知识梳理
接着上一篇继续来一篇关于mysql字符设置等问题学习笔记,这篇就不说什么废话了,直接进入正题,不过还是感谢十八哥的无私分享! 我们首先看看mysql整个数据存储和读取一个流程: 连接器(connect ...
- Domain many-to-many
class TakeAwardAct { String title; static hasMany=[awards:Award] static constraints = { } String toS ...
- mailx 乱码,sendmail发html邮件,脚本开机启动
echo "yes"|mailx -s "我" -S ttycharset=utf-8 -S sendcharsets=utf-8 -S encoding=ut ...
- 设计模式之组合模式(Composite)
组合模式原理:组合模式的作用是讲继承同一父类的不同子类对象组合起来,形成一个树形的结构,例如公司的部门组织 代码如下 #include <iostream> #include <st ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...