1647:迷路
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 97 通过数: 69
【题目描述】
原题来自:SCOI 2009
Windy 在有向图中迷路了。 该有向图有 N 个节点,Windy 从节点 0 出发,他必须恰好在 T 时刻到达节点 N−1。
现在给出该有向图,你能告诉 Windy 总共有多少种不同的路径吗?
注意:Windy 不能在某个节点逗留,且通过某有向边的时间严格为给定的时间。
【输入】
第一行包含两个整数,N,T;
接下来有 N 行,每行一个长度为 N 的字符串。第 i 行第 j 列为 0 表示从节点 i 到节点 j 没有边,为 1 到 9 表示从节点 i 到节点 j 需要耗费的时间。
【输出】
包含一个整数,可能的路径数,这个数可能很大,只需输出这个数除以 2009 的余数。
【输入样例】
2 2
11
00
【输出样例】
1
【提示】
样例说明 1
0→0→1
样例输入 2
5 30
12045
07105
47805
12024
12345
样例输出 2
852
数据范围与提示:
对于 30% 的数据,满足 2≤N≤5,1≤T≤30;
对于 100% 的数据,满足 2≤N≤10,1≤T≤109 。
当点i到点j的距离大于1时等价于向i,j两点其中增加若干个点形成一个链条,使链条末端点到达j点的距离为1

最大距离-1为最大插入点数

连接节点

化为布尔邻接矩阵

#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
const int maxx=101;
ll MOD=2009;
struct Mat
{ll m[maxx][maxx];int r,l;void Basic(){if(l!=r)throw "²»ÊÇÁÚ½Ó¾ØÕó";for(int i=0; i<r; i++)for(int j=0; j<r; j++)m[i][j]=(i==j);}Mat operator *(const Mat&c)const{Mat er;memset(er.m,0,sizeof(er.m));if(l!=c.r)throw "sad";er.r=r;er.l=c.l;for(int i=0; i<r; i++)for(int j=0; j<c.l; j++)for(int k=0; k<l; k++){er.m[i][j]=(er.m[i][j]+m[i][k]*c.m[k][j])%MOD;}return er;}friend ostream& operator<<(ostream &in,const Mat &c);
};
ostream& operator<<(ostream &in,const Mat &c)
{for(int i=0; i<c.r; i++){for(int j=0; j<c.l; j++)in<<c.m[i][j]<<' ';in<<endl;}return in;
}
int n,k;
ll mp[maxx][maxx];
ll powsM(Mat &a,ll b)
{Mat ans;ans.l=ans.r=n*9;ans.Basic();while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}return ans.m[0][(n-1)*9];
}
int main()
{//cin>>n>>k;for(int i=0; i<n; i++)for(int j=0; j<n; j++){char t;cin>>t;mp[i][j]=t-'0';}//0_1_2_3 4 5 6 7 8Mat foke;foke.l=foke.r=n*9;for(int i=0;i<n*9;i++)if((i+1)%9){foke.m[i][i+1]=1;}for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(mp[i][j]==0)continue;foke.m[9*i+(mp[i][j]-1)][j*9]=1;}cout<<powsM(foke,k)<<endl;return 0;
}

1647:迷路(矩阵快速幂+矩阵点的拆分)相关推荐

  1. 矩阵小专题(矩阵快速幂+矩阵加速)

    1.什么是矩阵? 矩阵(数学术语)_百度百科 2.矩阵快速幂 首先要知道,只有n*n的矩阵能乘以自身(否则不符合矩阵相乘的条件) 然后要明白普通的快速幂的原理(本质是把幂次二分,代码如下) inlin ...

  2. 51nod 1113 矩阵快速幂 (矩阵的n次方)

    给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果. Input 第1行:2个数N和M,中间用空格分隔. ...

  3. 快速幂、矩阵快速幂、快速乘法

    快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...

  4. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15

    今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...

  5. 矩阵相关操作和矩阵快速幂

    矩阵相关操作和矩阵快速幂 矩阵基本运算以及快速幂模板 POJ - 3070. Fibonacci Hdu - 1757A. Simple Math Problem Codeforces - 185A. ...

  6. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  7. 快速幂+矩阵快速幂(总结+例题)

    1.快速幂 以求a的b次方来介绍: 首先把b转换成二进制数 该二进制数第i位的权为  2^i - 1 . 比如 : 11的二进制是1011 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 ...

  8. 矩阵快速幂详解--用矩阵幂解决的多种问题

    最经典的题目 以及洛谷一大堆相似题斐波那契升级版,广义斐波那契等等,都是相关的题目.一般而言我们求解斐波那契无非是不断地向前迭代,但是这样的效率实在是太低了.对于nnn的规模如此之大的题目应该如何求解 ...

  9. 快速幂和矩阵快速幂详解+模板

    1.快速幂 一般的,我们都知道求只需要连续乘3次2就能得到,那么等于多少呢?其实这个一很简单,不就是13个2相乘吗,连续乘13次2就行了.那么,呢? 是不是要连续乘100次.1000次,我们将这类问题 ...

最新文章

  1. 《Node.js区块链开发》一3.5 亿书对DPoS机制的改进
  2. 第十五届全国大学生智能车竞赛线上竞赛方案(草案)
  3. 《Android游戏编程入门经典》——1.7节小结
  4. 微机原理换行代码_东华大学微机原理课程设计--代码转换
  5. (转)用JQuery实现Fix表头表格
  6. P6793-[SNOI2020]字符串【广义SAM,贪心】
  7. Docker添加或者更改容器的端口映射
  8. uploadify插件html5,免费的HTML5版uploadify送上
  9. jquery ajax xml attribute,获得jQuery ajax和asp.net webmethod xml响应工作
  10. Problem F. Grab The Tree博弈
  11. 在Window10下基于Anaconda安装Tensorflow以及Keras并基于Spyder进行验证
  12. js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径(转载)...
  13. 海康威视摄像机html5播放rtsp方案
  14. Linux下安装wechat
  15. 计算机2.0培训心得,信息技术2.0心得体会
  16. HDUOJ---汉洛塔IX
  17. windows11修改开机密码为空解决方案
  18. 安装windows时install.wim文件过大的解决方案
  19. Docker 入坑指南
  20. C++中类成员和类继承的private、protected和public关键字作用

热门文章

  1. ORA-01654错误:表空间满了,插入失败
  2. c语言int作用,c语言中int的用法
  3. 【渝粤教育】电大中专跨境电子商务理论与实务 (24)作业 题库
  4. android 安装多个app下载,多点下载2021安卓最新版_手机app官方版免费安装下载_豌豆荚...
  5. 《个人助手》新模块——数据手袋
  6. Javaweb实现员工信息管理系统
  7. 《送元二使安西》 王维渭城朝雨浥轻尘,客舍清清柳色新。劝君更尽一杯酒,西出阳关无故人。英文
  8. 浅谈Ble-Mesh的LPN模式
  9. 挑战巨头,主打安全的Telegram、超信胜算几何?
  10. 音视频编解码基础知识(1)- 音视频编解码过程