P4159 [SCOI2009]迷路

如果边权只有 0/1 那么不就是一个灰常简单的矩阵快速幂吗!

然鹅边权 $<=9$

所以我们把每个点拆成9个点!

解决~

 #include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
const int mod=;
int m,n,t;long long q;
struct matrix{
int a[][];
matrix(){memset(a,,sizeof(a));}
matrix operator * (const matrix &tmp) const{
matrix c;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int k=;k<=n;++k)
c.a[i][j]=(c.a[i][j]+a[i][k]*tmp.a[k][j])%mod;
return c;
}
matrix Pow(matrix x,int y){
matrix res;
for(int i=;i<=n;++i) res.a[i][i]=;
for(;y;y>>=,x=x*x)
if(y&) res=res*x;
return res;
}
}st;
int idx(int x,int y){return x+m*y;}//新点编号
int main(){
scanf("%d%d",&m,&t);n=m*;
for(int i=;i<=m;++i){
for(int j=;j<=;++j)
st.a[idx(i,j)][idx(i,j-)]=;//规定idx(i,0)作为原图的点向其他点连边,其他点与该点的边权就转化为连到idx(i,dist-1)上
scanf("%lld",&q);
for(int j=m;j>=;--j,q/=)
if(q%) st.a[i][idx(j,q%-)]=;
}st=st.Pow(st,t);
printf("%d",st.a[][m]);
return ;
}

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

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

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

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

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

  3. BZOJ1297:[SCOI2009]迷路——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1297 windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 ...

  4. 【bzoj1297】[SCOI2009]迷路 矩阵乘法

    题目描述 给出一个 $n$ 个点的有向图,每条边的权值都在 $[1,9]$ 之间.给出 $t$ ,求从 $1$ 到 $n$ ,经过路径边权和恰好为 $t$ 的方案数模2009. 输入 第一行包含两个整 ...

  5. P4159 [SCOI2009]迷路

    传送门 先考虑只有 01 边权的情况 显然可以DP+矩阵加速 但是现在边权不止 1 然鹅最大也只有 9 所以从这里入手,把点拆成 9 个,然后点之间的边权也就可以变成 1 了 同样的转移和矩阵加速 注 ...

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

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

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

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

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

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

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

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

随机推荐

  1. 使用synchronized(非this对象)同步代码块解决脏读问题

    首先通过示例来学习验证多个线程调用同一个方法时随机的. package syn_out_asyn; import java.util.ArrayList; import java.util.List; ...

  2. JS-获取class类名为某个的元素-【getClass】函数封装

    原理: /*  * 根据class获取元素. * 原理是,取出oparent下的所有元素,组成数组,然后遍历类名,全等判断.*/ 源码 1 function getClass(oParent,clsN ...

  3. call和apply方法

    /* * @ call和apply方法 * @ 当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作. * @ (有方法的)对象.call(" ...

  4. console输出图案

    探索天猫控制台下的图案是怎么制作的 通过它的源码找到以下代码(还原解压代码) 自己也照葫画瓢搞了个以前公司的logo

  5. Egret打包App 短暂黑屏解决方案 (Egret4.1.0)

    论坛已经有人解决:http://bbs.egret.com/forum.php?mod=viewthread&tid=30288&highlight=app%2B%E9%BB%91%E ...

  6. 【BZOJ2554】Color 概率神题

    [BZOJ2554]Color Description 有n个球排成一列,每个球都有一个颜色,用A-Z的大写字母来表示,我们每次随机选出两个球ball1,ball2,使得后者染上前者的颜色,求期望操作 ...

  7. 如何学习 cocos2d-x ?

    发表于 04/23/2014 作者 zrong — 24 条评论 ↓ 11,687 次查看 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处 ...

  8. Python - 字符串的方法及注释

    %r非常有用,他的含义是不管是整形还是字符串,都将打印出来

  9. 微信小程序 --- 拨打电话

    拨打电话:wx.makePhoneCall btnclick:function(){ wx.makePhoneCall({ phoneNumber:'12580' }); }

  10. Hive JOIN使用详解

    转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...