传送门

先考虑只有 01 边权的情况

显然可以DP+矩阵加速

但是现在边权不止 1

然鹅最大也只有 9

所以从这里入手,把点拆成 9 个,然后点之间的边权也就可以变成 1 了

同样的转移和矩阵加速

注意点之间的连接关系

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,mo=;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,T,m;
struct matrix//矩阵乘法不解释
{
int a[N][N];
matrix () { memset(a,,sizeof(a)); }
inline matrix operator * (const matrix &tmp) const {
matrix res;
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
res.a[i][j]=fk(res.a[i][j]+a[i][k]*tmp.a[k][j]%mo);
return res;
}
}F,M;
matrix ksm(matrix X,int Y)//矩阵快速幂不解释
{
matrix res;
for(int i=;i<=m;i++) res.a[i][i]=;
while(Y)
{
if(Y&) res=res*X;
X=X*X; Y>>=;
}
return res;
}
char s[N];
int main()
{
n=read(); T=read(); m=n*;
for(int i=;i<=n;i++)//构造转移矩阵
{
int t=(i-)*+;
for(int j=;j<;j++) M.a[t+j][t+j-]=;
scanf("%s",s+);
for(int j=;j<=n;j++)
{
if(s[j]=='') continue;
M.a[t][(j-)*+s[j]-'']=;
}
}
F.a[][]=;
F=F*ksm(M,T);
printf("%d",F.a[][(n-)*+]);
return ;
}

P4159 [SCOI2009]迷路的更多相关文章

  1. bzoj1297 / P4159 [SCOI2009]迷路

    P4159 [SCOI2009]迷路 如果边权只有 0/1 那么不就是一个灰常简单的矩阵快速幂吗! 然鹅边权 $<=9$ 所以我们把每个点拆成9个点! 解决~ #include<iostr ...

  2. [bzoj1297] [洛谷P4159] [SCOI2009] 迷路

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

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

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

  4. LUOGU P4159 [SCOI2009]迷路(矩阵乘法)

    传送门 解题思路 以前bpw讲过的一道题,顺便复习一下矩阵乘法.做法就是拆点,把每个点拆成\(9\)个点,然后挨个连边.之后若\(i\)与\(j\)之间的边长度为\(x\),就让\(i\)的第\(x\ ...

  5. BZOJ 1297: [SCOI2009]迷路( dp + 矩阵快速幂 )

    递推式很明显...但是要做矩阵乘法就得拆点..我一开始很脑残地对于每一条权值v>1的边都新建v-1个节点去转移...然后就TLE了...把每个点拆成9个就可以了...时间复杂度O((9N)^3* ...

  6. 1297: [SCOI2009]迷路

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

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

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

  8. [BZOJ 1297][SCOI2009]迷路

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

  9. B20J_1297_[SCOI2009]迷路_矩阵乘法

    B20J_1297_[SCOI2009]迷路_矩阵乘法 题意:有向图 N 个节点,从节点 0 出发,必须恰好在 T 时刻到达节点 N-1.总共有多少种不同的路径? 2 <= N <= 10 ...

随机推荐

  1. solr-用mmseg4j配置同义词索引和检索(IKanlyzer需要修改源码适应solr接口才能使用同义词功能)

    概念说明:同义词大体的意思是指,当用户输入一个词时,solr会把相关有相同意思的近义词的或同义词的term的语段内容从索引中取出,展示给用户,提高交互的友好性(当然这些同义词的定义是要在配置文件中事先 ...

  2. 多线程 wait(),notify()方法,案例总结

    废话不多说,案例如下 package com.xujingyang.Exok; /** * 商品类 * @author 徐景洋 */ public class Goods { private Stri ...

  3. (华为机试大备战)java。多了解了解最常用的那个类库的方法对处理字符串的方法

    1.常考字符串处理:对处理字符串的方法. (a)统计字符串中特定字符的个数. 2.郭靖考了一道二维数组?? 3.多了解了解最常用的那个类库的方法.

  4. 64位系统中fatal error: stdio.h: 没有那个文件或目录的错误的解决方法

    Ubuntu系统中可输入如下命令,安装开发环境: sudo apt-get install build-essential https://blog.csdn.net/yygydjkthh/artic ...

  5. WarTransportation TopCoder - 8404

    传送门 分析 我们高兴的发现数据范围特别小,所以我们可以随便搞.因为一共只砍掉一条路,所以我们先算出对于任意一个点如果将它的出边割掉一条则它到达终点的最坏情况的最短距离是多少,然后我们从终点向起点反着 ...

  6. WordCount测试小程序的实现

    一.GitHub地址: https://github.com/245553473/WordCount 二.PSP表格: PSP PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ...

  7. JVM-jvm学习大纲(0)

    1.详细jvm内存模型 2.讲讲什么情况下回出现内存溢出,内存泄漏? 3.说说Java线程栈 4.JVM 年轻代到年老代的晋升过程的判断条件是什么呢? 5.JVM 出现 fullGC 很频繁,怎么去线 ...

  8. DROOLS相关资料

    这个地址可以教你如何配置drools的workbench http://blog.csdn.net/u012373815/article/details/53526287 这篇文章教你如何搭建一个简单 ...

  9. CSS预处理器(SASS和LESS)

    Sass框架应用Sass简介 Sass又名SCSS,是CSS预处理器之一,它能让你更好更轻松的工作.Sass官网是这样描述Sass的:**Sass是一门高于CSS的元语言,能用来清晰的.结构化地描述文 ...

  10. requireJS入门基础

    参考  require.js详解 1.引用requireJS的html文件 <!DOCTYPE html> <head> <title>requireJS</ ...