Problem Statement

You are given positive integers $N$ and $M$.

Find the number, modulo $M$, of simple connected undirected graphs with $N$ vertices numbered $1, \dots, N$ that satisfy the following condition.

  • For every $u = 2, \dots, N-1$, the shortest distance from vertex $1$ to vertex $u$ is strictly smaller than the shortest distance from vertex $1$ to vertex $N$.

Here, the shortest distance from vertex $u$ to vertex $v$ is the minimum number of edges in a simple path connecting vertices $u$ and $v$.

Two graphs are considered different if and only if there are two vertices $u$ and $v$ that are connected by an edge in exactly one of those graphs.

Constraints

  • $3 \leq N \leq 500$
  • $10^8 \leq M \leq 10^9$
  • $N$ and $M$ are integers.

Input

The input is given from Standard Input in the following format:

$N$ $M$

Output

Print the answer.


Sample Input 1

4 1000000000

Sample Output 1

8

Sample Input 2

3 100000000

Sample Output 2

1

Sample Input 3

500 987654321

Sample Output 3

610860515

Be sure to find the number modulo $M$.

首先有一种生成树叫做最短路树(在本题可以理解成BFS树)。其实就是一棵树,保证根节点到点 \(x\) 的距离等于原图中根节点到点 \(x\) 的距离。发现 \(n\) 一定是单独占据了一层。考虑在树上一层一层去dp.

定义 \(dp_{i,j}\) 为已经填了 \(i\) 个数,最后一层有 \(j\) 个数的方案数。为了保证 \(n\) 在最后一层,在dp过程中假设只有 \(n-1\) 个数,最后才把点 \(n\) 加上去。枚举上一层有多少个数,如果有 \(k\) 个,那么考虑从 \(dp_{i-j,k}\) 中转移。明显只有相邻的层之间可以互相连边,不然不能保证最短路树的性质。在这一层的 \(j\) 个数可以任意和上一层的 \(k\) 个数连边,但是不可以一个都不连,方案数 \((2^k-1)^j\)。从剩余的 \(n-1-i+j\) 个数中要选出 \(j\) 个数,方案有 \(C_{n-1-i+j}^j\) 种。同时同一层的点互相连是没有影响的,方案乘上 \(2^{j\times (j-1)}\)。总结,

\[dp_{i,j}=\sum\limits_{k=1}^{i-j}dp_{i-j,k}\times (2^k-1)^j\times C_{n-1-i+j}^j\times 2^{j\times (j-1)}
\]

最后统计答案时,当最后一层有 \(j\) 个,那么点 \(n\) 可以随便和这 \(j\) 个点连边,但也不能全部不连。所以答案为

\[\sum\limits_{j=1}^{n-1}dp_{n-1,j}\times(2^j-1)
\]

为了保证 \(O(1)\) 转移,中要预处理出 \(pw_{i,j}\) 表示 \((2^i-1)^j\) 以及组合数。

#include<cstdio>
const int N=505;
int n,P,dp[N][N],f[N][N],pw[N][N],pw2[N*N],ans;//f[i][j]表示选了i个数,最后一层选了j个的方案数
int main()
{
scanf("%d%d",&n,&P);
for(int i=pw2[0]=1;i<=n*n;i++)
pw2[i]=(pw2[i-1]<<1)%P;
for(int i=dp[0][0]=1;i<=n;i++)
{
dp[i][0]=dp[i][i]=1;
for(int j=1;j<i;j++)
dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%P;
}
for(int i=pw[0][0]=1;i<=n;i++)
{
int k=pw2[i]-1;
for(int j=0,p=1;j<=n;j++,p=1LL*p*k%P)
pw[i][j]=p;
}
f[1][1]=1;
// printf("%d\n",f[4][1]);
for(int i=2;i<n;i++)
{
// if(i==n)
// printf("%d\n",i);
for(int j=1;j<i;j++)
for(int k=1;k<=i-j;k++)
(f[i][j]+=1LL*f[i-j][k]*dp[n-1-i+j][j]%P*pw[k][j]%P*pw2[j*(j-1)/2]%P)%=P;
}
// printf("%d\n",n-1);
// for(int i=1;i<=n;i++)
// {
// printf("%d\n",i);
// for(int j=1;j<i;j++)
// printf("%d %d %d\n",i,j,f[i][j]);
// }
for(int j=1;j<n;j++)
(ans+=1LL*(pw2[j]-1)*f[n-1][j]%P)%=P;
printf("%d",ans);
}

[ABC281G] Farthest City的更多相关文章

  1. Gym101981D - 2018ACM-ICPC南京现场赛D题 Country Meow

    2018ACM-ICPC南京现场赛D题-Country Meow Problem D. Country Meow Input file: standard input Output file: sta ...

  2. BZOJ 2001: [Hnoi2010]City 城市建设

    2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1132  Solved: 555[Submit][ ...

  3. History lives on in this distinguished Polish city II 2017/1/5

    原文 Some fresh air After your time underground,you can return to ground level or maybe even a little ...

  4. History lives on in this distinguished Polish city 2017/1/4

    原文 History lives on in this distinguished Polish city Though it may be ancient. KraKow, Poland, is a ...

  5. #1094 : Lost in the City

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is ...

  6. GeoIP Legacy City数据库安装说明

    Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...

  7. [POJ3277]City Horizon

    [POJ3277]City Horizon 试题描述 Farmer John has taken his cows on a trip to the city! As the sun sets, th ...

  8. 2015年第8本(英文第7本):the city of ember 微光城市

    书名:the City of Ember(中文名:微光城市) 作者:Jeanne DuPrau 单词数:6.2万 不重复单词数:未知 首万词不重复单词数:未知 蓝思值:未知 阅读时间:2015年4月2 ...

  9. 离散化+线段树 POJ 3277 City Horizon

    POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...

  10. HDU 1505 City Game (hdu1506 dp二维加强版)

    F - City Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

随机推荐

  1. K8S集群中使用JD KMS服务对敏感数据安全加密

    基本概念 KMS,Key Management Service,即密钥管理服务,在K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密.以保护敏感数据, 驱动和插件需要使用者 ...

  2. Gitbook Android App

    最有用Ionic 2 做了一个Gitbook 混合app, 上线google play的时候提醒我触犯了假冒行为,可能是logo和名字问题吧,放弃: 上线腾讯被认为是h5 app,不是native a ...

  3. MySQL 日志管理、备份与恢复

    MySQL 日志管理.备份与恢复 ---MySQL 日志管理--- MySQL 的日志默认保存位置为 /usr/local/mysql/data vim /etc/my.cnf [mysqld] ## ...

  4. Solution -「CF 1303G」Sum of Prefix Sums

    Description Link. 对于一棵树,选出一条链 \((u,v)\),把链上结点从 \(u\) 到 \(v\) 放成一个 长度 \(l\) 的数组,使得 \(\sum_{i=1}^{l}\s ...

  5. Denpendcy Injection 8.0新功能——KeyedService

    Denpendcy Injection 8.0新功能--KeyedService 本文只介绍 .NET Denpendcy Injection 8.0新功能--KeyedService,假定读者已熟练 ...

  6. Modbus转Profinet网关连接三菱变频器博图快速配置

    Modbus转Profinet网关连接三菱变频器博图快速配置 本案例将分享如何使用兴达易控的modbus转profinet网关(XD-MDPN100)来连接西门子1200系列plc,并实现三菱变频器的 ...

  7. Java自学网站--十几个网站的分析与评测

    ​简介 很多想学Java的人不知道怎样选教程,本文对Java自学网站进行评测. 本文不带主观倾向,只客观分析各个网站的区别. 第1类:大型培训机构(黑马等) 典型机构 黑马.尚硅谷.动力节点.白马.千 ...

  8. DESTOON做中英双语言(多语言)切换版本具体详解

    第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...

  9. VScodeSSH免密登录服务器

    参考:配置vscode 远程开发+ 免密登录 背景 我想要让VScode实现SSH免密登录服务器,那么就需要使用ssh keygen 生成的公私钥对,公钥id_rsa.pub放在服务器上,私钥id_r ...

  10. 区间检测(range)

    区间检测(range) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给定一个长度为n的序列,进行m次检测,每次检测某个区间中,是否有重复的数. 输入 第一行,两个整数n和m,表示序列 ...