Description
因为SJY干的奇怪事情过多,SJY收到了休假的通知,于是他准备在都市间来回旅游。SJY有一辆车子,一开始行驶性能为0,每过1时间行驶性能就会提升1点。每个城市的道路都有性能要求。SJY一共有t时间休息,一开始他位于1号城市(保证1号城市道路要求为0),他希望在n号城市结束旅程。每次穿过一条城市间的路会花费1时间,当然他也可以停留在一个城市不动而花费1时间。当且仅当车子的行驶性能大于等于一个城市,我们才能到达那里。SJY希望知道,旅游的方案模10086后的答案。(只要在某一时刻通过的道路存在一条不相同,就算不同的方案)

Input
第一行三个数n,m,t,表示有n个城市m条道路t时间。
第二行n个数,hi表示第i个城市的道路性能要求。
第三到m+2行,每行两个数u,v,表示城市u与城市v之间有一条单向道路连接(可能有重边)。

Output
包括一个数字,表示旅游的方案模10086。

Sample Input
5 17 7
0 2 4 5 3
1 2
2 1
1 3
3 1
1 4
4 1
4 5
5 4
5 3
4 1
2 1
5 3
2 1
2 1
1 2
2 1
1 3

Sample Output
245

Data Constraint
对于20%的数据,n<=10,t<=80;
对于50%的数据,n<=30,t<=80;
对于100%的数据,n<=70,m<=1000,t<=100000000,hi<=70。

//written by zzy

题目大意:

给你个图,有nnn个城市,mmm条边,每个城市至少要第h[i]h[i]h[i]时间后才能经过,
走一条边或呆在当前城市里都会花费时间111,
求在第ttt时间时到第nnn城市的方案数。

题解:

对于50%的数据,n<=30,t<=80n<=30,t<=80n<=30,t<=80,可以考虑dp,
设f[i][j]f[i][j]f[i][j]表在第 iii 时间到第 jjj 城市的方案数,a[i][j]a[i][j]a[i][j]表读入时城市 iii 到城市 jjj 的方案数
易推f[i][j]=∑f[i−1][k]∗a[k][j],(1<=k<=n)f[i][j]=∑f[i-1][k]*a[k][j],(1<=k<=n)f[i][j]=∑f[i−1][k]∗a[k][j],(1<=k<=n) //从在第 iii 时间从城市 kkk 到城市 jjj

考虑满分作法,
发现 h[i]<=70h[i]<=70h[i]<=70 ,即在第 707070 时间后没有限制,可以随便走,
那么每次矩阵 fff 都会乘上矩阵 aaa,

( a∗a[i,j]=∑a[i,k]∗a[k,j]a*a~[i,j]~=∑a[i,k]*a[k,j]a∗a [i,j] =∑a[i,k]∗a[k,j],即枚举 kkk ,从 iii 到 kkk 再走到 jjj 的方案数,
也即走两个时间从 iii 到 jjj 的方案数
那么 ata^tat 即走 ttt 个时间从 iii 到 jjj 的方案数)

用dp处理前 707070 时间和用矩阵快速幂后 707070 的时间
因为矩阵乘法有结合律
再令 fff 与 ·at-70 相乘,
答案为 f[t+1][n]f[t+1][n]f[t+1][n]

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 75
#define T 85
#define Mod 10086
using namespace std;int i,j,k,n,l,t,x,y;
int h[N],f[T][N];struct Mal{long long m[N][N];
};Mal a,b,ans;Mal mult(Mal x,Mal y) {Mal re;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)re.m[i][j]=0;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)for (int k=1;k<=n;k++)re.m[i][j]=(re.m[i][j]+(x.m[i][k]*y.m[k][j])%Mod)%Mod;return re;
}void mal_ksm(long long p) {for (int i=1;i<=n;i++)ans.m[i][i]=1;while (p) {if (p&1) ans=mult(ans,a);p>>=1;a=mult(a,a);}
}int main()
{scanf("%d%d%d",&n,&l,&t);for (i=1;i<=n;i++)scanf("%d",&h[i]);for (i=1;i<=l;i++) {scanf("%d%d",&x,&y);a.m[x][y]++;}f[0][1]=1;for (i=1;i<=n;i++) a.m[i][i]=1;for (i=1;i<=min(t,70);i++) for (j=1;j<=n;j++)if (h[j]<=i)for (k=1;k<=n;k++)f[i][j]=(f[i][j]+(f[i-1][k]*a.m[k][j])%Mod)%Mod;if (t<=70) {printf("%d",f[t][n]); return 0;}mal_ksm(t-70);a=ans;for (j=1;j<=n;j++)for (k=1;k<=n;k++)f[71][j]=(f[71][j]+(f[70][k]*a.m[k][j])%Mod)%Mod;printf("%d",f[71][n]);
}

jzoj 3847. 都市环游(travel) (Standard IO)相关推荐

  1. JZOJ 1775. 合并果子2 (Standard IO)

    1775. 合并果子2 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 在一个果园里,多多已经将所有的果子 ...

  2. 5177. 【NOIP2017提高组模拟6.28】TRAVEL (Standard IO)

    Description Input Output Solution 有大佬说:可以用LCT做.(会吗?不会) 对于蒟蒻的我,只好用水法(3s,不虚). 首先选出的泡泡怪一定是连续的一段 L, R 然后 ...

  3. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  4. 2554. 【NOIP2011模拟9.7】帕秋莉·诺蕾姬 (Standard IO)

    2554. [NOIP2011模拟9.7]帕秋莉·诺蕾姬 (Standard IO) Description 在幻想乡,帕秋莉·诺蕾姬是以宅在图书馆闻名的魔法使.这一天帕秋莉又在考虑如何加强魔法咒语的 ...

  5. 1116. 【HNOI2008】T_OY(踢欧阳^_^) (Standard IO)斜率优化dp

    1116. [HNOI2008]T_OY(踢欧阳^_^) (Standard IO) Time Limits: 1000 ms  Memory Limits: 65536 KB  Detailed L ...

  6. IBM x3850 X6 不开机 面板显示 sys voltage fault standard io book

    IBM x3850 X6 服务器不开机 面板显示 sys voltage fault standard io book 如果有软件绑定主板,要维修主板哦,可加 w:cfx02100313(请备注)## ...

  7. jzoj 3426. 封印一击 (Standard IO)

    Description "圣主applepi于公元2011年9月创造了Nescafe,它在散发了16吃光辉之后与公元2011年11月12日被封印为一颗魂珠,贮藏于Nescafe神塔之中.公元 ...

  8. jzoj 3813. 我要的幸福 (Standard IO)

    Description 幸福/我要的幸福/渐渐清楚/梦想/理想/幻想/狂想/妄想/我只想坚持每一步/该走的方向/就算一路上/偶尔会沮丧/生活是自己/选择的衣裳/幸福/我要的幸福/没有束缚/幸福/我要的 ...

  9. JZOJ 5222. 【GDOI2018模拟7.12】A (Standard IO)

    题目链接: Click here Solution 设 v a l i val_i vali​表示 i i i与它后面的数形成的逆序对个数. a n s ans ans为原来数列逆序对个数. 每次询问 ...

最新文章

  1. 认识计算机系统反思,《认识计算机系统》教学反思
  2. IO流(IO异常处理方式)
  3. Java实现反向输出链表
  4. java api 英文_JAVA中英文API(在线版)
  5. postgresql 备份_在Kubernetes上使用PostgreSQL的正确姿势:第三部分
  6. 硬盘坏道拷贝软件_什么是数据恢复工具,一款一键恢复软件
  7. 软考信息系统监理师第五次作业
  8. ThreadLocal 你到底是个什么鬼
  9. Java面试之到底值传递和引用传递???
  10. 如何使用webrtc 一
  11. mysql增删改查_MySQL的基本使用——简单的增删改查
  12. hive 两个没有null指定的表左关联的结果有null_Hive企业级调优表的优化
  13. [Linux] 通过shell给unix socket发送数据
  14. Beetle简单构建TCP服务
  15. MySQL缓存推荐使用吗_Mysql 查询缓存利弊
  16. 网络教室是以多媒体计算机为核心,浅谈多媒体计算机网络教室发展趋势和方向...
  17. 武汉纺织大学计算机考试在哪个校区,武汉纺织大学校区有几个 地址是什么
  18. npm cb() never called!和 Error: getaddrinfo ENOTFOUND registry.npmjs.com registry.npmjs.com:443
  19. Landsat系列卫星:Landsat 9 详解和细节(NASA/USGS)
  20. 坐式养生八段锦口诀及练法图解

热门文章

  1. 线性回归 --梯度下降法与标准方程法
  2. 【PostgreSQL】GIN索引安装与使用 - 全模糊匹配/数组匹配,PG批量插入上万随机生成数据,随机生成字符串/数组
  3. 使用java创建pdf 并返回流给前端
  4. 基于安卓Android的五子棋游戏设计与实现
  5. ULN2003型达林顿管
  6. 一共81个,开源大数据处理工具汇总
  7. 泰坦尼克号生存预测python_泰坦尼克号生存预测(python)
  8. 《百词斩》功能测试和测试管理
  9. ReactJS学习系列课程(React ref的使用)
  10. 31 实战 上海地铁的一天动态可视化