• BZOJ4887:[TJOI2017]可乐(矩阵乘法)


    Description

    加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且
    放在了加里敦星球的1号城市上。这个可乐机器人有三种行为:停在原地,去下一个相邻的
    城市,自爆。它每一秒都会随机触发一种行为。现在给出加里敦星球城市图,在第0秒时可
    乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?

    Input

    第一行输入两个正整数N,M表示城市个数,M表示道路个数。(1≤N≤30,0≤M≤100)
    接下来M行输入u,v表示u,v之间有一条道路。
    (1≤u,v≤n)保证两座城市之间只有一条路相连。
    最后输入时间t。1<t≤10^6

    Output

     输出可乐机器人的行为方案数,答案可能很大,请输出对2017取模后的结果。

    Sample Input

    3 2
    1 2
    2 3
    2

    Sample Output

    8

    Solution

    一开始傻了在想DP
    后来才发现这是个矩阵快速幂模板题……
    把邻接矩阵做t次幂,邻接矩阵a[i][j]的意义就成了从i走到j的方案数
    这个题只需要把每个点的自爆引一条单向边到n+1就好了,停留就连一条自环

    Code

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #define MOD (2017)
     5 using namespace std;
     6 
     7 int n,m,ans,u,v,t;
     8 
     9 struct Matrix
    10 {
    11     int m[32][32];
    12     void clear(){memset(m,0,sizeof(m));}
    13 }A,G;
    14 
    15 Matrix operator * (Matrix a,Matrix b)
    16 {
    17     Matrix ans; ans.clear();
    18     for (int i=1; i<=n+1; ++i)
    19         for (int j=1; j<=n+1; ++j)
    20             for (int k=1; k<=n+1; ++k)
    21                 (ans.m[i][j]+=a.m[i][k]*b.m[k][j])%=MOD;
    22     return ans;
    23 }
    24 
    25 Matrix Qpow(Matrix a,int p)
    26 {
    27     Matrix ans; ans.clear();
    28     for (int i=1; i<=n+1; ++i) ans.m[i][i]=1;
    29     while (p)
    30     {
    31         if (p&1) ans=ans*a;
    32         a=a*a; p>>=1;
    33     }
    34     return ans;
    35 }
    36 
    37 int main()
    38 {
    39     scanf("%d%d",&n,&m);
    40     for (int i=1; i<=m; ++i)
    41     {
    42         scanf("%d%d",&u,&v);
    43         G.m[u][v]=G.m[v][u]=1;
    44     }
    45     for (int i=1; i<=n+1; ++i)
    46         G.m[i][n+1]=1,G.m[i][i]=1;
    47     scanf("%d",&t); 
    48     G=Qpow(G,t);
    49     for (int i=1; i<=n+1; ++i)
    50         (ans+=G.m[1][i])%=MOD;
    51     printf("%d",ans);
    52 }
  • 相关阅读:
    如何用SQL命令修改字段名称
    两个sql server 2000的通用分页存储过程
    Tomcat 6 连接 MS SQL 2005
    log4net 配置与应用
    如何去除Google搜索结果病毒提示
    Windows 2003远程桌面连接数限制
    ntext replace sql
    FCKeditor详细的设置
    SQL Server 自增字段归零等问题
    SQLServer2005数据库还原到SQLServer2000
  • 原文地址:https://www.cnblogs.com/refun/p/9380785.html
Copyright © 2020-2023  润新知