Description

windy在有向图中迷路了。 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1。 现在给出该有向图,你能告诉windy总共有多少种不同的路径吗? 注意:windy不能在某个节点逗留,且通过某有向边的时间严格为给定的时间。

Input

第一行包含两个整数,N T。 接下来有 N 行,每行一个长度为 N 的字符串。 第i行第j列为'0'表示从节点i到节点j没有边。 为'1'到'9'表示从节点i到节点j需要耗费的时间。

Output

包含一个整数,可能的路径数,这个数可能很大,只需输出这个数除以2009的余数。

Sample Input

【输入样例一】
2 2
11
00

【输入样例二】
5 30
12045
07105
47805
12024
12345

Sample Output

【输出样例一】
1

【样例解释一】
0->0->1

【输出样例二】
852

HINT

30%的数据,满足 2 <= N <= 5 ; 1 <= T <= 30 。 100%的数据,满足 2 <= N <= 10 ; 1 <= T <= 1000000000 。

Solution

矩阵快速幂

一开始看到以为还是板子...不过发现这题是有边权的。后来在hjw大佬的点醒下发现可以拆点

然后套板子就行了

新姿势++

  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define inf 0x3f3f3f3f
  5. #define il inline
  6.  
  7. namespace io {
  8.  
  9. #define in(a) a=read()
  10. #define out(a) write(a)
  11. #define outn(a) out(a),putchar('\n')
  12.  
  13. #define I_int int
  14. inline I_int read() {
  15. I_int x = , f = ; char c = getchar() ;
  16. while( c < '' || c > '' ) { if( c == '-' ) f = - ; c = getchar() ; }
  17. while( c >= '' && c <= '' ) { x = x * + c - '' ; c = getchar() ; }
  18. return x * f ;
  19. }
  20. char F[ ] ;
  21. inline void write( I_int x ) {
  22. I_int tmp = x > ? x : -x ;
  23. if( x < ) putchar( '-' ) ;
  24. int cnt = ;
  25. while( tmp > ) {
  26. F[ cnt ++ ] = tmp % + '' ;
  27. tmp /= ;
  28. }
  29. while( cnt > ) putchar( F[ -- cnt ] ) ;
  30. }
  31. #undef I_int
  32.  
  33. }
  34. using namespace io ;
  35.  
  36. using namespace std ;
  37.  
  38. #define N 500
  39. const int mod = ;
  40.  
  41. int n = read() , T = read() ;
  42. struct matrix {
  43. int m[ N ][ N ] ;
  44. matrix() { memset( m , , sizeof( m ) ) ; }
  45. int *operator[] ( int a ) { return m[ a ] ; }
  46. matrix operator * ( matrix &x ) {
  47. matrix ans ;
  48. memset( ans.m , , sizeof( ans.m ) ) ;
  49. for( int i = ; i <= n ; i ++ ) {
  50. for( int j = ; j <= n ; j ++ ) {
  51. for( int k = ; k <= n ; k ++ ) {
  52. ans[ i ][ j ] = ( ans[ i ][ j ] + m[ i ][ k ] * x[ k ][ j ] % mod ) % mod ;
  53. }
  54. }
  55. }
  56. return ans ;
  57. }
  58. } a ;
  59.  
  60. matrix power( matrix a , int b ) {
  61. matrix ans , base = a ;
  62. memset( ans.m , , sizeof( ans.m ) ) ;
  63. for( int i = ; i <= n ; i ++ )
  64. ans[ i ][ i ] = ;
  65. while( b ) {
  66. if( b & ) ans = ans * base ;
  67. base = base * base ;
  68. b >>= ;
  69. }
  70. return ans ;
  71. }
  72.  
  73. char ch[ ] ;
  74.  
  75. int main() {
  76. for( int i = ; i <= n ; i ++ ) {
  77. scanf( "%s" , ch+ ) ;
  78. for( int j = ; j <= n ; j ++ ) {
  79. if( ch[ j ] > '' ) {
  80. a[ * ( i - ) + (ch[ j ] - '' ) ][ * ( j - ) + ] = ;
  81. }
  82. }
  83. }
  84. for( int i = ; i <= n ; i ++ ) {
  85. for( int j = ; j < ; j ++ ) {
  86. a[ * ( i - ) + j ][ * ( i - ) + j + ] = ;
  87. }
  88. }
  89. n *= ; //puts("233");
  90. matrix ans = power( a , T ) ;
  91. printf( "%d\n" , ans[ ][ n - ] ) ;
  92. }

BZOJ1297: [SCOI2009]迷路 矩阵快速幂的更多相关文章

  1. BZOJ 1297: [SCOI2009]迷路 [矩阵快速幂]

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  2. Luogu P4159 [SCOI2009]迷路 矩阵快速幂+精巧转化

    大致就是矩阵快速幂吧.. 这个时候会发现这些边权$\le 9$,然后瞬间想到上回一道题:是不是可以建一堆转移矩阵再建一个$lcm(1,2,3,4,5,6,7,8,9)$的矩阵?...后来发现十分的慢q ...

  3. [SCOI2009]迷路(矩阵快速幂) 题解

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  4. BZOJ 1297 迷路(矩阵快速幂)

    很容易想到记忆化搜索的算法. 令dp[n][T]为到达n点时时间为T的路径条数.则dp[n][T]=sigma(dp[i][T-G[i][n]]); 但是空间复杂度为O(n*T),时间复杂度O(n*n ...

  5. BZOJ1297 [SCOI2009]迷路 矩阵乘法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1297 题意概括 有向图有 N 个节点,从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. ...

  6. bzoj1297: [SCOI2009]迷路(矩阵乘法+拆点)

    题目大意:有向图里10个点,点与点之间距离不超过9,问从1刚好走过T距离到达n的方案数. 当时看到这题就想到了某道奶牛题(戳我).这两道题的区别就是奶牛题问的是走T条边,这道题是每条边都有一个边权求走 ...

  7. 【BZOJ1297】[SCOI2009]迷路(矩阵快速幂)

    [BZOJ1297][SCOI2009]迷路(矩阵快速幂) 题面 BZOJ 洛谷 题解 因为边权最大为\(9\),所以记录往前记录\(9\)个单位时间前的.到达每个点的方案数就好了,那么矩阵大小就是\ ...

  8. 【矩阵快速幂】bzoj1297 [SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1407  Solved: 1007[Submit][Status ...

  9. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

随机推荐

  1. Memcached与redis的比较--stackoverflow(转)

    原文:http://blog.nosqlfan.com/html/3729.html 这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来.关于Redis与Memc ...

  2. Animator Override Controller学习及性能测试

    本文由博主(YinaPan)原创,转载请注明出处: http://www.cnblogs.com/xsln/p/Animator_Override_Controller.html 一.Animator ...

  3. java 8 学习资料

    出处: 总览 http://www.importnew.com/24300.html stream api 详解 : https://www.ibm.com/developerworks/cn/jav ...

  4. 【F12】谷歌浏览器F12前端调试工具 Console

    谷歌浏览器F12前端调试工具 Console 前言 先上图:不知道有多少人发现,在浏览器开发工具的“Console”上的百度首页的关于百度招聘的信息: 今天要给大家介绍的就是是Web前端调试工具中的C ...

  5. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块

    详细解读Python的web.py框架下的application.py模块   这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...

  6. xpath教程 1 - 什么是XPath

    xpath教程 1 什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历. W3School官方 ...

  7. python中实现mysql连接池

    python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...

  8. 【spring mvc】springmvc在tomcat中的执行过程

    一.WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象(每个web应用程序唯一),它代表当前web应用web容器提供其一个全局的上下文环境,其为后面的spri ...

  9. ABP项目创建

    第一种:1.在MyAbp.Migrator下面的appsettings.json里面的sql连接语句 MyAbp.Web.Host 下面的appsettings.json 里面的连接语句2.把MyAb ...

  10. PAT Radix[二分][进制转换][难]

    1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...