国庆集训 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 到)正在玩一个信息传递的游戏. ...
随机推荐
- 【Linux】一步一步学Linux——Unix发展史(02)
目录 00. 目录 01. 请参考Unix传奇 02. 03. 00. 目录 @ 本博客后面会更新 01. 请参考Unix传奇 链接: https://coolshell.cn/articles/23 ...
- JDK8源码解析 -- HashMap(一)
最近一直在忙于项目开发的事情,没有时间去学习一些新知识,但用忙里偷闲的时间把jdk8的hashMap源码看完了,也做了详细的笔记,我会把一些重要知识点分享给大家.大家都知道,HashMap类型也是面试 ...
- javascript进度条实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- vue 百度云上传文件PostObject
百度云上传文件 API(PostObject) PostObject接口 : 接口描述 此接口使用HTML表单上传文件到指定bucket,用于实现通过浏览器上传文件到bucket.在PutObjec ...
- vue打包后.woff字体文件路径问题处理
在执行 npm run build 命令打包后,如果出现 .woff 等字体文件找不到的情况 通过设置 vue-style-loader 打包前缀路径解决
- 将网址url中的参数转化为JSON格式的两种方法
在我们进入主题前,我先先看下获取网址URL的方法: window.location.href // 设置或获取整个URL为字符串 window.location.hash // 设置或获取href属性 ...
- SDcms1.8代码审计
由于工作原因,分析了很多的cms也都写过文章,不过觉得好像没什么骚操作都是网上的基本操作,所以也就没发表在网站上,都保存在本地.最近突然发现自己博客中实战的东西太少了,决定将以前写的一些文章搬过来,由 ...
- ORACLE获取年初年末,月初月末,季度初季度末
转自:https://www.cnblogs.com/leqhome/p/5319984.html --年初,年末select trunc(sysdate,'yyyy') from dual;sele ...
- STM8 内部flash
举例 typedef enum { FLASH_MEMTYPE_PROG = (u8)0x00, /*!< Program memory */ FLASH_MEMTYPE_DATA = (u8) ...
- 【vue开发】超简单的防止连续点击js指令方法
vue防重复点击(指令实现) 快速点击按钮会重复多次调用接口,防止出现这样的情况 全局定义,方便调用 新建plugins.js export default { install (Vue) { // ...