题目

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

Sample Output

1

Data Constraint

Hint

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

分析

  • 首先如果我们这个图只有0和1的话,这个矩阵的T次方就是答案
  • 为什么
  • 设f[k][i][j]为在k时刻走到i,j的方案数 显然 f[k][i][j]=∑1-n f[k-a[i][j]][i][j] a[i][j]不都是1吗 那么化简
  • f[k][i][j]=∑1-n f[k-1][i][j] 不就和原方程一样吗
  • 然后对于这道题
  • 我们拆点
  • 拆成多个为一的点求矩阵快速幂

代码

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn=90,p=2009;
 5 int tmp[maxn][maxn],bb[maxn][maxn], ans[maxn][maxn];
 6 int id,n,t;
 7 void mul_mat(int a[][maxn],int b[][maxn])
 8 {
 9     memset(tmp,0,sizeof(tmp));
10     for (int i=0;i<id;i++)
11       for (int j=0;j<id;j++)
12         for (int k=0;k<id;k++)
13             tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j]%p)%p;
14     memcpy(a,tmp,sizeof(tmp));
15 }
16 void ksm()
17 {
18     for (int i=0;i<id;i++)
19        ans[i][i]=1;
20     int tt=t;
21     while (tt)
22     {
23         if (tt&1) mul_mat(ans,bb);
24         mul_mat(bb,bb);
25         tt>>=1;
26     }
27 }
28 int main ()
29 {
30     char c;
31     cin>>n>>t;
32     id=n*9;
33     for (int i=0;i<n;i++)
34     {
35         for (int j=0;j<8;j++)
36             bb[i*9+j][i*9+j+1]=1;
37         for (int j=0;j<n;j++)
38         {
39             cin>>c;
40             c-='0';
41             if (c) bb[i*9+c-1][j*9]=1;
42         }
43     }
44     ksm();
45     cout<<ans[0][(n-1)*9];
46 } 

转载于:https://www.cnblogs.com/zjzjzj/p/11330416.html

JZOJ 1036. 【SCOI2009】迷路相关推荐

  1. P4159 [SCOI2009] 迷路

    P4159 [SCOI2009] 迷路 题意: 该有向图有 n 个节点,节点从 1 至 nn 编号,windy 从节点 1 出发,他必须恰好在 t 时刻到达节点 n. 现在给出该有向图(带边权),你能 ...

  2. bzoj 1297: [SCOI2009]迷路(矩阵快速幂)

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1322  Solved: 938 [Submit][Statu ...

  3. [SCOI2009]迷路 题解

    [SCOI2009]迷路 [SCOI2009]迷路 文章目录 思考过程 题解 思考过程 这个东西发现距离只有 999,记得 Lcm(1-9)=2520\tt Lcm(1 \dots 9) = 2520 ...

  4. [C++][SCOI2009]迷路

    文章目录 [SCOI2009]迷路 题目描述 输入格式: 输出格式: 输入样例: 输出样例 #1: 输入样例: 输出样例: 分析 拆点 小结代码 代码 [SCOI2009]迷路 题目描述 windy在 ...

  5. bzoj1297 [SCOI2009]迷路(矩阵优化)

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

  6. bzoj1297 [SCOI2009]迷路——拆点+矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1297 一看感觉是矩阵快速幂之类的,但边权不好处理啊: 普通的矩阵快速幂只能处理边权为1的,所 ...

  7. [BZOJ1297/Luogu4159][SCOI2009]迷路

    题目链接: BZOJ1297 Luogu4159 首先考虑距离只有\(0,1\)的情况 那么如果设\(f[t][i][j]\)表示\(i\)到\(j\)走\(t\)时刻的方案数,有转移方程: \(f[ ...

  8. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  9. 基础省选+NOI-第7部分 概率统计与多项式

    1.FFT https://www.bilibili.com/video/BV1V7411c7yP https://www.bilibili.com/video/BV1aW411v7Kb https: ...

最新文章

  1. 波士顿动力CEO:不排斥军方订单,就想你粗暴地对待机器狗
  2. oracle配置首选项主目录名_ArduinoIDE安装与配置
  3. 水木-机器学习推荐论文和书籍
  4. Java Spring log源代码学习
  5. 《AI技术人才成长路线图》:完整版PPT及要点解读
  6. 分布式系统基础-1、架构演进
  7. matlab怎么画二维热力图_Tableau画日历热力图
  8. java字符串数字统计_对字符串进行简单的字符数字统计 探索java中的List功能
  9. Python 执行主程序
  10. APISpace 空号检测API接口 免费好用
  11. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  12. 智能驾驶场景库设计方法-V2X
  13. Unity编辑器扩展——撤回
  14. 学前端进度慢怎么办?前端学不懂怎么办?
  15. 搞算法的仙女妹子,爱了!!
  16. python opencv压缩图片_OpenCV Python 缩放图片
  17. ZZULIOJ 2411: 摘柿子
  18. PL/0源程序C语言版
  19. HTTP状态码大全(整理)
  20. 解读5类成功短视频自媒体的运营套路

热门文章

  1. P2920 [USACO08NOV]时间管理Time Management
  2. mysql 乱码问题
  3. 分析varnish日志
  4. 无人驾驶的规划与控制(四)——反馈控制
  5. Python使用pip安装/卸载包
  6. Ubuntu Linux服务器配置SSH无密码登陆
  7. idea可以正常启动无法进入断点_IDEA Debug 无法进入断点的解决方法
  8. C#通过反射动态加载dll,读取module、类、方法、特性,并通过反射+简单工厂+配置文件 实现ioc
  9. Coinbase在2020年下半年共收到执法机构2313次信息申请
  10. Coinbase在苹果应用商店前100免费应用中排名第30位