国庆集训 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的更多相关文章

  1. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  2. 国庆集训Day1

    T1 divide 题意: 有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\) 令\(a = a_1\times a_2\,\times ...

  3. 长乐国庆集训Day1

    T1 统计数字 题目 [题目描述] 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4. 如果一个正整数满足 S(x*x) = S( ...

  4. 雅礼集训 Day1 T2 折射

    折射 题目描述 小\(\mathrm{Y}\)十分喜爱光学相关的问题,一天他正在研究折射. 他在平面上放置了\(n\)个折射装置,希望利用这些装置画出美丽的折线. 折线将从某个装置出发,并且在经过一处 ...

  5. 暑假提高组集训Day1 T2

    那么这一道题我在考试的时候写挂了(0分 呜呜~) 我原来的思路是广搜来骗取部分分(哈哈~) 但是我忘记了一个非常重要的问题 我广搜开的数组没有考虑负的下标 下一次考试如果再写暴力 就可以把坐标都加上一 ...

  6. 2019 牛客国庆集训day1 2019 点分治

    题目链接:https://ac.nowcoder.com/acm/contest/1099/I 点分治,计算路径数的时候,先将每个点到根的距离模2019,计算的时候就可以O(n)求出数目,对于模201 ...

  7. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1

    目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...

  8. 2019暑期金华集训 Day1 组合计数

    自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...

  9. codevs 4511 信息传递(NOIP2015 day1 T2)

    4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...

随机推荐

  1. MySQL8.0新特性实验1

    Server层,选项持久化 mysql> show variables like '%max_connections%';+------------------------+-------+| ...

  2. spring的事务解决方案之@Transactional注解

    首先此注解位于 org.springframework.transaction.annotation 这个包路径下面, 事务有两种类别,一种是编程式事务,另一种是声明式事务,显然此注解是声明式事务,这 ...

  3. PMBOK项目管理的五大过程组和十大知识领域

    PMBOK五大过程组是:启动过程.规划过程.执行过程.监控过程.收尾过程. 各用一句话概括项目管理知识体系五大过程组: 1.启动过程组:作用是设定项目目标,让项目团队有事可做: 2.规划过程组:作用是 ...

  4. jQuery 基础知识

    一.序言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后的又一个优秀的JavaScript代码库(JavaScript框架).jQuery设计的宗旨是"W ...

  5. TortoiseSVN-1.7.12.24070-x64-svn-1.7.9安装包和汉化包

    链接:https://pan.baidu.com/s/1NbrQW44N_kTh7VN0Fz0zVA 提取码:nhd9 先安装TortoiseSVN-1.7.12.24070-x64-svn-1.7. ...

  6. 【转载】C#指定文件夹下面的所有内容复制到目标文件夹下面

    在涉及到文件夹操作的过程中,有时候需要将文件夹下的所有内容复制拷贝到另一个文件夹,在C#的开发中有时候会遇到这个功能需求将指定文件夹下所有的内容复制到另一个文件夹,这个过程需要遍历所有的文件和目录.此 ...

  7. 解决 VUE项目过大nodejs内存溢出问题

    今天在启动vue项目的时候报了这样一个错误, 如图所示:频繁出现此种情况,项目太大,导致内存溢出,排除代码问题外,可参照以下方式解决 // 全局安装increase-memory-limit npm ...

  8. 前端框架开始学习Vue(一)

    MVVM开发思想图(图片可能会被缩小,请右键另存查看,图片来源于网络)   定义基本Vue代码结构   1 v-text,v-cloak,v-html命令 默认 v-text没有闪烁问题,但是会覆盖元 ...

  9. hashmap,hashtable,concurrenthashmap多线程下的比较(持续更新)

    1.hashMap 多线程下put会造成死循环,主要是扩容时transfer方法会造成死循环. http://blog.csdn.net/zhuqiuhui/article/details/51849 ...

  10. MNIST手写数据集在运行中出现问题解决方案

    今天在运行手写数据集的过程中,出现一个问题,代码没有问题,但是运行的时候一直报错,错误如下: urllib.error.URLError: <urlopen error [SSL: CERTIF ...