[SCOI 2009]迷路

传送门

问题描述

Windy 在有向图中迷路了。 该有向图有 \({N}\) 个节点,Windy 从节点 \({1}\) 出发,他必须恰好在 \({T}\) 时刻到达节点 \({N}\)。

现在给出该有向图,你能告诉 Windy 总共有多少种不同的路径吗?

注意:Windy 不能在某个节点逗留,且通过某有向边的时间严格为给定的时间。

输入格式:

第一行包含两个整数,\({N,T}\);

接下来有 \({N}\) 行,每行一个长度为 \({N}\) 的字符串。第 \({i}\) 行第 \({j}\) 列为 \({0}\) 表示从节点 \({i}\) 到节点 \({j}\) 没有边,为 \({1}\) 到 \({9}\) 表示从节点 \({i}\) 到节点 \({j}\) 需要耗费的时间。

输出格式:

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

样例输入1:

2 2

11

00

样例输出1:

1

样例说明1:

\({1→1→2}\)

样例输入2:

5 30

12045

07105

47805

12024

12345

样例输出2:

852

说明:

对于 \({ 30 \% }\) 的数据,满足 \({2 \leq N \leq 5,1 \leq T \leq 30}\);

对于 \({ 100 \% }\) 的数据,满足 \({2 \leq N \leq 10,1 \leq T \leq 10^9}\)。

分析

1.这dio图里怎么还有自环呢?

哦 凑时间用的

2.既然是个图 那就画出来看看叭(过于抽象以至于未完成)



实在蚌埠住了

3.乂~它在矩阵快速幂专题里面诶,那就先打个板子叭

(打板子ing)

既然是矩阵快速幂,那肯定要推递推式啊

                          \({\large 试试就逝世}\)

假如输入是个邻接矩阵

我们先不看边权(假设边权都为1) 无权的都推不出来还推什么带权的

显而易得

这个邻接矩阵自乘\({T}\)次之后 \({a[1][n]}\) 就是答案

设\({F[i,j]}\)表示\({i \sim j}\)

若有连边则说明\({i \sim j}\)有一种路径

那么\({a[i][k]*a[k][j]}\)就相当于从\({i}\)走到\({k}\)的方案数乘以从\({k}\)到\({j}\)的方案数

将所有的\({a[i][k]*a[k][j]}\)加起来 就能得到多走\({1}\)的方案数

于是就有了方程:

                      \({\large F_t=\sum_{k=1}^n {f_{t-1}}[i,k] * f_1[k,j]}\)

所以\({F_1}\)就是最原始的矩阵aaaaaaaaa

但问题在于 这个矩阵的边权不为\({1}\)aaaaaaaaaaa

————————————————————

问佬佬()

。。。。。。。。。。。。。。。。。。。。。。

学成归来

————————————————————

于是我们知道了一个叫做拆点的东东

由于上限为9

我们将\({1}\)个点拆成\({9}\)个点,第\({i}\)个点拆成的第\({j-1}\)个点向第\({j}\)个点连一条边权为\({1}\)的边

那么\({i \sim j}\)有一条边权为\({k}\)的边等价于\({i}\)向\({j}\)拆成的第\({k}\)个点连边

最后再跑一遍矩阵快速幂就好啦~~~

code

Elaina's code
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f
#define INF 0x7fffffff
#define mst(a,b) memset(a,b,sizeof(a))
#define Elaina 0
const int N = 15;
const int mod = 2009;
int n,sn,t; struct Mat{
int n,m;
int a[N*9][N*9];
void clean(){
mst(a,0);
}
void unit(){
clean();
for(int i=1;i<=n;i++){
a[i][i]=1;
}
}
void resize(int x,int y){
n=x,m=y;
}
Mat operator * (const Mat &A) const {
Mat res;
res.resize(n,n);
res.clean();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
res.a[i][j]=(a[i][k]*A.a[k][j]+res.a[i][j])%mod;
}
}
}
return res;
}
}; Mat qpow(Mat A,int b){
Mat res;
res.resize(n,n);
res.unit();
while(b){
if(b&1){
res=res*A;
}
A=A*A;
b>>=1;
}
return res;
}
Mat mat;
signed main(){
cin>>n>>t;
sn=n;
n*=9;
char x[N]; mat.resize(n,n);
for(int i=1;i<=sn;i++){
for(int j=1;j<=8;j++){
mat.a[(i-1)*9+j+1][(i-1)*9+j]=1;
}
}
for(int i=1;i<=sn;i++){
scanf("%s",x+1);
for(int j=1;j<=sn;j++){
if(x[j]>'0'){
mat.a[(j-1)*9+1][(i-1)*9+x[j]-'0']=1;
}
}
}
mat=qpow(mat,t);
cout<<mat.a[sn*9-8][1]%mod;
return Elaina;
}

都看到这了,真的不点个赞吗(>ω<*)

[SCOI 2009] 迷路 (矩阵快速幂)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 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 ...

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

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

  10. poj4474 Scout YYF I(概率dp+矩阵快速幂)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4100   Accepted: 1051 Descr ...

随机推荐

  1. idea2018 破解

    本人使用的是idea2018.1.11,对2018其它版本的应该都是管用的 idea2018-1.11 下载地址 链接:https://pan.baidu.com/s/1_RlJGZtfMxr1Nx9 ...

  2. vue+elementui批量上传下载注意事项

    批量手动上传文件,和表单数据一起提交 1.在el-upload组件关键的钩子,其它省略 multiple :auto-upload = "false" :file-list = & ...

  3. 4、Web前端学习规划:JavaScript - 学习规划系列文章

    JavaScript作为Web前端里的第3重要的语言,笔者认为该重点进行学习.因为JavaScript衍生出来的框架和类库有不少,而且很强大.所以JavaScript的学习要抓好重点,在基本的语法及应 ...

  4. 嫌 OSS 查询太慢?看我们如何将速度提升 10 倍!

    背景 HDFS 是 Hadoop 生态的默认存储系统,很多数据分析和管理工具都是基于它的 API 设计和实现的.但 HDFS 是为传统机房设计的,在云上维护 HDFS 一点也不轻松,需要投入不少人力进 ...

  5. koreanDollLikeness_v10模型下载及使用

    koreanDollLikeness_v10模型 前几天给大家提供了koreanDollLikeness_v15模型的下载,最近小卷终于找到koreanDollLikeness_v10模型啊.先来说说 ...

  6. 素数打表,洛谷P1217 [USACO1.5]回文质数 Prime Palindromes

    这道题的最后一个样例TLE(超时)了,判断素数的条件是 i*i<n 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include ...

  7. 2.3 实验:用linxerUnpack进行通用脱壳--《恶意代码分析实战》

    Lab01-03.exe     实验内容:   1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗?   2.是否有这个文件被 ...

  8. cached地址和uncached地址的区别

    cached地址和uncached地址的区别是 对cached地址的访问是委托给CPU进行的,也就是说你的操作到底是提交给真正的外设或内存,还是转到CPU缓存,是由CPU决定的.CPU有一套缓存策略来 ...

  9. 吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?

    敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper. 当然至于是否属实,其实一个人是否是海王,微信.QQ 聊天记录里面记得清清楚 ...

  10. Java设计模式-外观模式Facade

    介绍 外观模式(Facade),也叫"过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式通过定义一个一致的接口, ...