矩阵。

一个图的邻接矩阵的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. 编译时和运行时、OC中对象的动态编译机制

    编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字 ...

  2. c语言编程之栈(数组实现)

    用数组实现的顺序栈,完成了出栈入栈功能. #include"stdio.h" typedef int element; #define max 100 typedef struct ...

  3. WinForm程序界面假死,寻求完美解决方案

    故事的开端是这样的,小白是一个程序员,他确实也是一个小白,目前还在程序员发展的道路上,兢兢业业的小心求学. 有一天,小白接到一个任务,完成一个Winform程序,附加一个功能就是可以读IC卡. 小白终 ...

  4. 使用Div+CSS布局设计网站的优点

    网页设计业界越来越关注DIV+CSS的标准化设计,大到各大门户网站,小到不计其数的个人网站,在Div+CSS标准化的影响下,网页设计人员已经把这一要求作为行业标准.那么什么是Div+CSS标准?Div ...

  5. 【BZOJ】【2440】【中山市选2011】完全平方数

    莫比乌斯函数/容斥原理 PoPoQQQ讲义引入例题= = 比较水……就是莫比乌斯函数的简单应用,也可理解为乱容斥一下…… 二分答案——>求1~x有多少个无平方因子的数Q(x). 引用一下PoPo ...

  6. 有关javascript中的JSON.parse和JSON.stringify的使用一二

    有没有想过,当我们的大后台只是扮演一个数据库的角色,json在前后台的数据交换中扮演极其重要的角色时,作为依托node的前端开发,其实相当多的时间都是在处理数据,准确地说就是在处理逻辑和数据(这周实习 ...

  7. 从String类看写C++ class需要注意的地方

    #include <iostream> #include <string.h> using namespace std; class String { char* m_data ...

  8. 微信变声器(WeChat Voice)会是营销新利器吗

    微信变声器(WeChat Voice)2.0 Android版开始内测了,时间从2015年5月20日 - 2015年6月20日,使用微信变声器改变你的声音,并分享给好友! 无论你是想装可爱还是恶搞,微 ...

  9. 任务调度 QUARTZ

    任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commo ...

  10. Lua 代码编写技巧

    1.克隆表 u = {unpack(table)} 一般克隆长度较小的表 2.判断表是否为空 if next(t) == nil then..  判断该表是否为空,包括t={}的情况 3.插入表 使用 ...