首先,题意就把我们引向了矩阵乘法,注意边长m<=60,那么就按边建图,变成一个120个点的图,然后乱搞就行了。

PS:WA了N久改了3次终于A了QAQ

CODE:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define mod 45989
using namespace std;
struct mat{
    int n,m;
    long long a[122][122];
    mat(){n=m=0;memset(a,0,sizeof(a));}
    int I(int _x){n=m=_x;for (int i=1;i<=n;i++) a[i][i]=1;}
};
mat operator *(const mat x,const mat y){
    mat ans;
    ans.n=x.n;ans.m=y.m;
    for (int i=1;i<=x.n;i++)
        for (int j=1;j<=y.m;j++)
            for (int k=1;k<=x.m;k++)
                (ans.a[i][j]+=x.a[i][k]*y.a[k][j])%=mod;
    return ans;
}
mat power(mat x,long long y){
    mat ans;ans.I(x.n);
    for (;y;y>>=1){
        if (y&1) ans=ans*x;
        x=x*x;
    }
    return ans;
}
struct edges{
    int id,to,next;
}edge[123];
int l,next[23];
int addedge(int from,int to,int id){
    edge[++l]=(edges){id,to,next[from]};
    next[from]=l;
}
int main(){
    int n,m,a,b;
    long long t;
    mat x;
    scanf("%d%d%lld%d%d",&n,&m,&t,&a,&b);
    x.n=x.m=m*2;
    a++;b++;
    for (int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        x++;y++;
        addedge(x,y,i);
        addedge(y,x,i+m);
    }
    for (int i=1;i<=n;i++)
        for (int j=next[i];j;j=edge[j].next)
            for (int k=next[edge[j].to];k;k=edge[k].next)
                if (abs(edge[j].id-edge[k].id)!=m) x.a[edge[j].id][edge[k].id]=1;
    x=power(x,t-1);
    int q=t&1==1?1:0;
    long long ans=0;
    for (int i=next[a];i;i=edge[i].next)
        for(int j=1;j<=l;j++) if (edge[j].to==b) (ans+=x.a[edge[i].id][edge[j].id])%=mod;
    printf("%lld",ans);
    return 0;
}

BZOJ 1875: [SDOI2009]HH去散步(矩阵乘法)的更多相关文章

  1. bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...

  2. BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )

    把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...

  3. bzoj 1875 [SDOI2009]HH去散步(矩乘)

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...

  4. 【bzoj1875】[SDOI2009]HH去散步 矩阵乘法

    题目描述 一张N个点M条边的无向图,从A走到B,要求:每一次不能立刻沿着上一次的边的反方向返回.求方案数. 输入 第一行:五个整数N,M,t,A,B. N表示学校里的路口的个数 M表示学校里的路的条数 ...

  5. BZOJ.1875.[SDOI2009]HH去散步(DP 矩阵乘法)

    题目链接 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 ...

  6. BZOJ 1875 [SDOI2009]HH去散步 ——动态规划 矩阵乘法

    发现t非常大,所以大概就是快速幂一类的问题了, 然后根据k^3logn算了算,发现k大约是边数的时候复杂度比较合适. 发现比较麻烦的就是前驱的记录,所以直接把边看做点,不能走反向边,但是可以走重边,然 ...

  7. 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂

    [题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...

  8. bzoj 1875: [SDOI2009]HH去散步

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...

  9. [SDOI2009] HH去散步 (矩阵乘法)

    link $solution:$ 将边化为点后重新建矩阵,跑$T-1$幂即可(因为跑的是新边). 最后直接找与$x,y$所相连的边即可. #include<iostream> #inclu ...

随机推荐

  1. XP Mode 虛擬機器 for Windows 7

    免驗證官方直接下載 官網 Download Windows Virtual PC XP Mode for Windows 7 性質 Windows 7 免費 / en 多國 繁體中文(Traditio ...

  2. C# .NET中的 反射的应用

    C#中的映射 C#编译后的文件主要由IL代码和元数据组成,元数据为.NET组件提供了丰富的自描述特性,它使得我们可以在代码运行时获知组件中的类型等重要的信息.C#中这是通过一种称作映射(Reflect ...

  3. UVa 11747 - Heavy Cycle Edges

    题目大意:计算最小生成树有两种算法:一种是kruskal算法,另一种是与之相反的:如果图中存在环,去掉权重最大的边,直到不存在环.输出去掉的那些边. 可以用kruskal算法解决,在判断一条边时如果加 ...

  4. Linux之目录基本操作命令

    Linux之目录基本操作命令 目录基本操作命令 1.tree命令 tree命令以树状图列出目录的内容. 语法 tree(选项)(参数) 选项 1.-a显示所有文件和目录 2.-A使用ASNI绘图字符显 ...

  5. PHP加水印代码 支持文字和图片水印

    PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有 ...

  6. mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别,Mybatis sql in

    1.mybatis 参数为list时,校验list是否为空 2. mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * fr ...

  7. php字符串比较

    比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说 就是前者强调“identical”类型也要求一样:后者要求“equal”,值相同就可以了.或者使用str ...

  8. iOS 之 Property List

    1. 概念 用于存储串行化对象,xml格式,存储到plist文件中. 2. 用途 存储用户设置. 3. 优点 程序运行时可动态创建和读写. 4. 使用说明 4.1. 获取plist文件 NSStrin ...

  9. CSS图形形状大全

    The Shapes of CSS All of the below use only a single HTML element. Any kind of CSS goes, as long as ...

  10. Hibernate常见异常

    1.数据库编码问题 主要错误信息 WARN: SQL Error: 1366, SQLState: 22001 ... ERROR: Data truncation: Incorrect string ...