【JZOJ5061】【GDOI2017第二轮模拟day1】最长路径
来源:互联网 发布:windows api文档 编辑:程序博客网 时间:2024/05/16 07:18
Description
在Byteland 一共有n 个城市,编号依次为1 到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i 和j,在它们之间有且仅有一条单向道路,方向要么是i 到j,要么是j 到i。换句话说,这是一个n 个点的竞赛图。
Byteasar 居住在1 号城市,他希望从1 号城市出发,沿着单向道路不重复地访问一些城市,使得访问的城市数尽可能多。
请写一个程序,帮助Byteasar 计算有多少种道路修建方式,使得从1 号点出发的最长简单路径经过点数恰好为k,由于答案可能很大,请对P 取模输出。
Data Constraint
Solution
对于不太喜欢用脑子的我来说,10分钟打出前60分后走人……
但现在是时候正面杠这道题了……
根据某位大牛的理论,竞赛图有以下性质:
1、竞赛途中必存在一条哈比顿路径。
2、若把在同一个强连通分量的点合并,并然会形成一条链的形式,即不会产生分叉。
别问我怎么证明,理解不到,就背到。
我们设出f[i]表示i个点时竞赛图的方案,g[i]表示i个点时全图构成一个强连通分量的方案。
那么我们现在设i表示1所在的强连通分量的大小,j表示1之后有多少个点。
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long longusing namespace std;const ll maxn=2e3+5;ll f[maxn],g[maxn],c[maxn][maxn],ans[maxn];ll n,mo,i,t,j,k,l,x,y,z;ll mi(ll y){ if (y==1) return 2; ll t=mi(y/2); if (y%2) return t*t%mo*2%mo;return t*t%mo;}int main(){ freopen("path.in","r",stdin);freopen("path.out","w",stdout); scanf("%lld%lld",&n,&mo); c[0][0]=1; for (i=1;i<=n;i++){ c[i][0]=1; for (j=1;j<=i;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo; } f[0]=g[0]=f[1]=g[1]=1; for (i=1;i<=n;i++){ if (i>1)f[i]=g[i]=mi(i*(i-1)/2); for (j=1;j<i;j++) g[i]-=g[j]*f[i-j]%mo*c[i][j]%mo; g[i]=(g[i]%mo+mo)%mo; } for (i=1;i<=n;i++){ for (j=0;j<=n-i;j++) ans[i+j]+=c[n-1][i-1]*c[n-i][j]%mo*g[i]%mo*f[j]%mo*f[n-i-j]%mo; } for (i=1;i<=n;i++) ans[i]%=mo,printf("%lld\n",ans[i]);}
1 0
- 【JZOJ5061】【GDOI2017第二轮模拟day1】最长路径
- 【GDOI2017第二轮模拟day1】最长路径
- 【GDOI2017第二轮模拟day1】最长路径(性质题,容斥,组合数学)
- jzoj 5061. 【GDOI2017第二轮模拟day1】最长路径 动态规划
- 【GDOI2017第二轮模拟day1】公路建设
- 【JZOJ5060】【GDOI2017第二轮模拟day1】公路建设
- GDOI2017第二轮模拟
- 【jzoj5060】【GDOI2017第二轮模拟day1】【公路建设】【数据结构】
- GDOI2017第二轮模拟总结
- GDOI2017模拟第二轮总结
- GDOI2017第二轮模拟总结
- jzoj 5060. 【GDOI2017第二轮模拟day1】公路建设 线段树+最小生成树
- 【GDOI2017第二轮模拟day1】公路建设(克鲁斯卡尔最小生成树+线段树+归并)
- GDOI2017模拟第二轮 4.15-4.17
- jzoj【GDOI2017第二轮模拟day2】开房间
- 【GDOI2017第二轮模拟day2】中位数
- 【GDOI2017第二轮模拟day2】开房间
- 【GDOI2017第二轮模拟day2】中位数
- IBM的DB2数据库常用命令及查询
- C# 发送邮件的记录(qq,126,Gmail)
- SDN(二)使用Ryu控制器
- adt下载问题
- LintCode 30 插入区间
- 【JZOJ5061】【GDOI2017第二轮模拟day1】最长路径
- scanf输入函数与缓存的关系
- 单例模式之静态内部类实现
- (四) AGPS辅助定位
- chrome浏览器插件
- 人脸识别(2)--Python3.6+OpenCV3.2识别实例
- 蛇形分割理解(活动轮廓)
- Python学习之比较列表和字符串
- this的理解(很全面)