矩阵。

一个图的邻接矩阵的m次幂相当于 长度恰好为m的路径数。这要求边权为1。

因为边权小于等于9,所以可以把一个点拆成9的点。 拆成的第(i+1)个点向第i个点连边。

如果存在边(u,v,w) 就由u点向v拆成的第w个点连边,这样表明w次以后就可以到达v点。

这个拆点很牛啊,不过第一眼连邻接矩阵都没看出来。。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 100 + 10;
const int mod = 2009; struct Matrix {
int a[maxn][maxn];
int n; int* operator [] (int x) {
return a[x];
} Matrix operator* (Matrix b) {
Matrix c;
c.n=n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
c[i][k]=(c[i][k]+a[i][j]*b[j][k])%mod;
return c;
} Matrix operator^ (int e) {
Matrix res,tmp=*this;
res.init(n);
while(e) {
if(e&1) res=res*tmp;
tmp=tmp*tmp;
e>>=1;
}
return res;
} void output() {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
} void input() {
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
} void init(int k) {
n=k;
for(int i=1;i<=n;i++) a[i][i]=1;
} Matrix() {
memset(a,0,sizeof(a));
}
}g,res; int n,m,k,vid;
int id[maxn][maxn]; int main() {
scanf("%d%d",&n,&m);
k=n*9; res.n=g.n=k;
for(int i=1;i<=n;i++)
for(int j=1;j<=9;j++)
id[i][j]=++vid; for(int i=1;i<=n;i++)
for(int j=1;j<9;j++)
g[id[i][j+1]][id[i][j]]=1; for(int i=1,t;i<=n;i++)
for(int j=1;j<=n;j++) {
scanf("%1d",&t);
if(!t) continue;
g[id[i][1]][id[j][t]]=1;
}
for(int i=1;i<=k;i++) res[i][i]=1;
res=res*(g^m);
printf("%d\n",res[id[1][1]][id[n][1]]);
return 0;
}

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

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

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

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

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

  3. BZOJ1297 [SCOI2009]迷路 矩阵乘法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1297 题意概括 有向图有 N 个节点,从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. ...

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

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

  5. BZOJ1297 [SCOI2009]迷路 【矩阵优化dp】

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

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

  7. bzoj1297: [SCOI2009]迷路(矩阵乘法+拆点)

    题目大意:有向图里10个点,点与点之间距离不超过9,问从1刚好走过T距离到达n的方案数. 当时看到这题就想到了某道奶牛题(戳我).这两道题的区别就是奶牛题问的是走T条边,这道题是每条边都有一个边权求走 ...

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

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

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

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

随机推荐

  1. WPF解析TTF 字体

    偶遇需要自己解析 TTF 字体并显示,此做... using System; using System.Collections.Generic; using System.Drawing.Text; ...

  2. Asp.Net修改上传文件大小限制(修改web.config)

    i. Configuration节点下 <system.webServer> <security> <requestFiltering> <!--单位为字节  ...

  3. zend studio 10 字体,颜色,快捷键等相关设置

    一.修改字体 没想到zend studio 10中对中文显示不太好看,似乎有点小了.修改如下:打开 Window->Preferences->General->Appearance- ...

  4. Socket 阻塞模式和非阻塞模式

    阻塞I/O模型: 简介:进程会一直阻塞,直到数据拷贝 完成 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返 ...

  5. spoj 138

    离散化  去掉重复点 排序  二分查找 #include<cstdio> #include<cstring> #include<algorithm> #define ...

  6. Unity3D脚本中文系列教程(一)

    原地址:http://dong2008hong.blog.163.com/blog/static/46968827201403115643431/?suggestedreading&wumii ...

  7. **【ci框架】精通CodeIgniter框架

    http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...

  8. IText 生成页脚页码

    做doc文档报表的时候可能遇到这样的需求: 每一个页面需要页码,用IText可以完成这样的需求. IText生成doc文档需要三个包:iTextAsian.jar,iText-rtf-2.1.4.ja ...

  9. Oracle日期函数

    Oracle日期函数用于对Oracle数据库中的日期及时间进行处理. (1)ADD_MONTHS Oracle日期函数返回一个具有与所提供日期相差月份的日期,函数中给出了未来或以前的月份数.语法如下: ...

  10. 深入理解JVM--类的执行机制

    在完成将class文件信息加载到JVM并产生class对象之后,就可以执行Class对象的静态方法或者实例方法对对象进行调用了.JVM在源代码编译阶段将源代码编译为字节码文件,字节码是一种中间代码的方 ...