当初学矩阵幂的时候弃掉了,那时候只会用矩阵优化递推,碰到这种图论的瞬间躺地。

昨天听学长的课,有一道例题,在边权为一的图上求从某点到某点的路径方案数,只要对邻接矩阵跑qpow就完事了。

于是自己画了个小图,手跑矩阵,发现是真的,开始思考why。

其实矩阵幂感觉和floyed很像,c[i][j]=∑a[i][k]*b[k][j],k就像是floyed中的断点,每次进行一次操作就好像走了一步,那么就会有方案数的改变,a到b走两步,可以由k1、k2、k3……过去,那矩阵幂就把这个过程加速了。

至于这种边权不为1的,可以拆成9个点,除了第一个是实点,别的都是虚点,各个点直接连单向边,权为1,表示可以用一的贡献过去,然后有权值直接从i的第val个虚点指向j的第1个点,这样就和原问题等价了。

剩下的就是qpow和最后输出谁了,自己想想,不会的看代码在想想。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
const int P=;
int n,k;
char ch[];
int cal(int i,int j){
return (i-)*+j;
}
struct Matrix{
int x[][];
friend Matrix operator * (Matrix a,Matrix b){
Matrix c;
memset(c.x,,sizeof(c.x));
// c.debug();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int k=;k<=n;k++)
c.x[i][j]=(c.x[i][j]+a.x[i][k]*b.x[k][j])%P;
return c;
}
void add(int a,int b){
x[a][b]=;
return ;
}
void ench(){
for(int i=;i<=n;i++)
x[i][i]=;
return ;
}
void debug(){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<endl;
}
}
void put(){
printf("%d",x[][n-]);
return ;
}
}a;
void qpow(int k){
Matrix b,c;
c.ench();
// cout<<endl;
// c.debug();
b=a;
for(;k;k>>=,b=b*b)
if(k&) c=c*b;
a=c;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
for(int j=;j<;j++)
a.add(cal(i,j),cal(i,j+));
scanf("%s",ch+);
for(int j=;j<=n;j++){
if(ch[j]-''==) continue;
a.add(cal(i,ch[j]-''),cal(j,));
}
}n*=;
// a.debug();
qpow(k);
// cout<<endl;
// a.debug();
a.put();
return ;
}

SCOI2009迷路的更多相关文章

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

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

  2. 1297: [SCOI2009]迷路

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

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

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

  4. [BZOJ 1297][SCOI2009]迷路

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

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

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

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

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

  7. bzoj1297 / P4159 [SCOI2009]迷路

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

  8. [Bzoj1297][Scoi2009 ]迷路 (矩阵乘法 + 拆点)

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

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

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

  10. 1297. [SCOI2009]迷路【矩阵乘法】

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

随机推荐

  1. B-Tree和 B+Tree的数据存储结构

    B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引.B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的.在讲B ...

  2. python之数字类型小知识

    数字是表示计数的抽象事物,也是数学运算和推理的基础,所以,生活中数字是生活中无处不在的,那么,在python语言中运用数字有哪些小知识呢,不妨花点时间看一下这篇博文,牢记这些小知识. 整数类型中四种进 ...

  3. 创建LEANGOO看板

    转自:https://www.leangoo.com/leangoo_guide/leangoo_guide_create_kanban.html#toggle-id-3 Leangoo使用看板来管理 ...

  4. springboot搭建web项目与使用配置文件

    目录 一.准备工作 二.创建基础web项目 1. maven配置 2.创建maven项目.配置pom.xml为web基础项目 3.编写启动类 4.使用maven打包 5.使用命令java -jar x ...

  5. oracle字符集问题随笔

    oracle字符集问题: 1.select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITO ...

  6. Creating a PXE Configuration File

      The PXE configuration file defines the menu displayed to the pxe client host as it boots up and co ...

  7. Delphi 卡通控件

    樊伟胜

  8. 九,configMap及secret的基本使用

    目录 制定容器配置的方式 configMap(存储数据为明文,敏感数据慎用) 创建configMap的几种方式 命令行创建和测试configMap实例 创建一个Pod 挂载测试 通过指定文件创建con ...

  9. [工具] fierce--子域收集

    简介 fierce 是使用多种技术来扫描目标主机IP地址和主机名的一个DNS服务器枚举工具.运用递归的方式来工作.它的工作原理是先通过查询本地DNS服务器来查找目标DNS服务器,然后使用目标DNS服务 ...

  10. 第二章 Vue快速入门--13 讲解v-model实现表单元素的数据双向绑定

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...