国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图
现在要生成一张\(n\)个点的有向图。要求满足:
1.若有 a->b的边,则有 b->a 的边
2.若有 a->b 的边和 b->c 的边,则有 a->c 的边
3.至少有一个点没有自环。
求方案数模上\(m\)
\(n≤2000,2≤m≤1,000,000,007\)样例:
input
2 5
output
3
有点难度的DP,首先需要明确的是在一个连通图中每一个点都有自环(样例可体现),所以有点没有自环当且仅当这一个点独立为一个联通块。
设\(g[i]\)表示\(i\)个点自由组合,且每个点都存在自环的方案数,\(f[i]\)表示\(i\)个点自由组合,且至少有1个点没有自环的方案数(\(f[n]\)即答案)
考虑\(f[i]\)转移有以下情况:
- 第\(i\)个点孤立且没有自环,即\(f[i]+=f[i-1]+g[i-1]\)
- 第\(i\)个点孤立且自环,即\(f[i]+=f[i-1]\)
- 第\(i\)个点与前\(i-1\)个点中的\(j-1\)个点构成一个大小为\(j\)的联通块,即\(f[i]+=\sum_{j=2}^{i-1}f[i-j]\times C_{i-1}^{j-1}\)
考虑\(g[i]\)转移有以下情况:
- 第\(i\)个点孤立且自环,即\(g[i]+=g[i-1]\)
- 类似的,第\(i\)个点与前\(i-1\)个点中的\(j-1\)个点构成一个大小为\(j\)的联通块,即\(g[i]+=\sum_{j=2}^{i-1}g[i-j]\times C_{i-1}^{j-1}\)
为求\(C_n^m\),我们可以利用杨辉三角,第\(i\)行第\(j\)列(\(i\)从0开始)即为\(C_i^j\)
#include <cstdio>
#define MAXN 2002
#define ll long long
using namespace std;
ll C[MAXN][MAXN]; //C[n][m]
ll f[MAXN],g[MAXN];
int n,MOD;
int main(){
scanf("%d %d", &n, &MOD);
for(int i=0;i<=n;++i){
C[i][0]=1;
for(int j=1;j<=i;++j)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
}
f[1]=1;
g[1]=1;
for(int i=2;i<=n;++i){
g[i]=g[i-1]%MOD;
for(int j=2;j<=i-1;++j)
g[i]=(g[i]+g[i-j]*C[i-1][j-1]%MOD)%MOD;
g[i]=(g[i]+1)%MOD;
f[i]=(f[i-1]+f[i-1]+g[i-1])%MOD;
for(int j=2;j<=i-1;++j)
f[i]=(f[i]+f[i-j]*C[i-1][j-1]%MOD)%MOD;
}
printf("%lld", f[n]);
return 0;
}
一开始题读错了导致后面DP推错了,以后注意要仔细揣摩样例与题意
国庆集训 Day1 T2 生成图 DP的更多相关文章
- 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)
牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...
- 国庆集训Day1
T1 divide 题意: 有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\) 令\(a = a_1\times a_2\,\times ...
- 长乐国庆集训Day1
T1 统计数字 题目 [题目描述] 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4. 如果一个正整数满足 S(x*x) = S( ...
- 雅礼集训 Day1 T2 折射
折射 题目描述 小\(\mathrm{Y}\)十分喜爱光学相关的问题,一天他正在研究折射. 他在平面上放置了\(n\)个折射装置,希望利用这些装置画出美丽的折线. 折线将从某个装置出发,并且在经过一处 ...
- 暑假提高组集训Day1 T2
那么这一道题我在考试的时候写挂了(0分 呜呜~) 我原来的思路是广搜来骗取部分分(哈哈~) 但是我忘记了一个非常重要的问题 我广搜开的数组没有考虑负的下标 下一次考试如果再写暴力 就可以把坐标都加上一 ...
- 2019 牛客国庆集训day1 2019 点分治
题目链接:https://ac.nowcoder.com/acm/contest/1099/I 点分治,计算路径数的时候,先将每个点到根的距离模2019,计算的时候就可以O(n)求出数目,对于模201 ...
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- codevs 4511 信息传递(NOIP2015 day1 T2)
4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...
随机推荐
- ubuntu 安装 Java 开发环境
可以使用命令 -jre-headless 或者使用: 本文链接:https://blog.csdn.net/sangewuxie/article/details/80958611 本人的ubunt ...
- 关于window.location.hash的理解及其应用(转)
原文1:https://blog.csdn.net/zhuchuji/article/details/50736360 原文2(window.location.href和window.location ...
- Aop 打印参数日志时,出现参数序列化异常。It is illegal to call this method if the current request is not in asynchron
错误信息: nested exception is java.lang.IllegalStateException: It is illegal to call this method if the ...
- hdu 1501 贪心问题
这道题目的关键就是逐个搜索的过程 找个时间得复习一下dfs了 这里使用temp作为参照变量 每次比较以后(由于已经排序好) 已temp为参照进行下一次的比较
- SQL Server2008导入导出数据库
一.导出数据库 1.新建一个.bak的文本 右击数据库-->Tasks-->BackUp-->Remove原来的数据库-->Add后选择之前建立的.bak档 二.导入数据库 1 ...
- 一、hystrix如何集成在openfeign中使用
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 HystrixInvocationHandler hystrix是开源的一个熔断组件,s ...
- vue 后台管理系统菜单权限管理
来自:https://www.cnblogs.com/fqh123/p/11094296.html 侵删 login登录方法 login() { if (!this.username) { retur ...
- Matplotlib pyplot中title() xlabel() ylabel()无法显示中文(即显示方框乱码)的解决办法
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11020246.html 一.无法正常显示原因 ...
- S5PV210 时钟
CLOCK DOMAINS 时钟域 S5PV210 consists of three clock domains, namely, main system (MSYS), display syste ...
- Vue指令之`v-for`和`key`属性
2.2.0+ 的版本里,**当在组件中使用** v-for 时,key 现在是必须的. 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “**就地复用**” 策略.如果数据项 ...