[ABC281G] Farthest City
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)}\)。总结,
\]
最后统计答案时,当最后一层有 \(j\) 个,那么点 \(n\) 可以随便和这 \(j\) 个点连边,但也不能全部不连。所以答案为
\]
为了保证 \(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的更多相关文章
- Gym101981D - 2018ACM-ICPC南京现场赛D题 Country Meow
2018ACM-ICPC南京现场赛D题-Country Meow Problem D. Country Meow Input file: standard input Output file: sta ...
- BZOJ 2001: [Hnoi2010]City 城市建设
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1132 Solved: 555[Submit][ ...
- 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 ...
- 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 ...
- #1094 : Lost in the City
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is ...
- GeoIP Legacy City数据库安装说明
Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...
- [POJ3277]City Horizon
[POJ3277]City Horizon 试题描述 Farmer John has taken his cows on a trip to the city! As the sun sets, th ...
- 2015年第8本(英文第7本):the city of ember 微光城市
书名:the City of Ember(中文名:微光城市) 作者:Jeanne DuPrau 单词数:6.2万 不重复单词数:未知 首万词不重复单词数:未知 蓝思值:未知 阅读时间:2015年4月2 ...
- 离散化+线段树 POJ 3277 City Horizon
POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...
- HDU 1505 City Game (hdu1506 dp二维加强版)
F - City Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
随机推荐
- 树链剖分 | 洛谷 P4114 Qtree1
前言 题目链接:洛谷 P4114 Qtree1 前置知识:树链剖分 题意 给定一棵树,有修改边权和查询两点之间边权最大值两种操作,对于每个查询输出结果. 解析 已经在前置博客里提到,树链剖分 可以将树 ...
- 三维模型OBJ格式轻量化压缩变形现象分析
三维模型OBJ格式轻量化压缩变形现象分析 三维模型的OBJ格式轻量化压缩是一种常见的处理方法,它可以减小模型文件的体积,提高加载和渲染效率.然而,在进行轻量化压缩过程中,有时会出现模型变形的现象,即压 ...
- 如何通过抖音订单API接口获取订单详情
要通过抖音订单API接口获取订单详情,您需要进行以下步骤: 1.获取Access Token:使用APP ID和APP Secret调用获取Access Token API接口来获取您的Access ...
- Leetcode刷题笔记——二分法
二分法是搜索算法中极其典型的方法,其要求输入序列有序并可随机访问.算法思想为 输入:有序数组nums,目的数值target 要求输出:如果target存在在数组中,则输出其index,否则输出-1 将 ...
- redis单机、主从、哨兵、集群以及redisson分布式锁
1.搭建集群 Linux系统的Redis各版本下载路径:https://download.redis.io/releases/,建议下载5.0以上的版本,下载后进行解压安装 (1)单机版 安装环境 y ...
- 2016A
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm& ...
- 解决WordPress修改固定链接结构后出现“404 Not Found”的情况
解决办法 在宝塔面板找到部署的站点设置 点击进入配置文件,复制下方这段代码粘贴进入配置文件,操作完这步,去刷新下我们的网站,再打开文章链接就可以正常打开.访问了. location / { try_f ...
- 什么是vfs以及它的作用
VFS(Virtual File System,虚拟文件系统)是计算机操作系统中的一个概念,它提供了一个统一的抽象层,使得操作系统可以支持不同的文件系统类型和存储设备,而不需要直接与每个文件系统进行交 ...
- FFmpeg: How To Convert MP4 Video To MP3 Audio?
FFmpeg: How To Convert MP4 Video To MP3 Audio? Learn how to Convert an MP4 Video to MP3 Audio wit ...
- 我为什么要从PhoneGap中逃离? 转
我为什么要从PhoneGap中逃离? 摘要:每一位程序员都有自己的技术信仰,我也不例外.但当技术信仰遇到实际工作中的问题时,你又要怎么做呢?还记得刚刚接触HTML5做跨平台开发的时候这样的问题就摆在 ...