zoukankan      html  css  js  c++  java
  • [bzoj 4887] [Tjoi2017]可乐

    传送门

    Description

    加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且

    放在了加里敦星球的1号城市上。这个可乐机器人有三种行为:停在原地,去下一个相邻的

    城市,自爆。它每一秒都会随机触发一种行为。现在给出加里敦星球城市图,在第0秒时可

    乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?

    Solution

    蒟蒻(PaperCloud)终于(bzoj)百题祭啦

    方案数=邻接矩阵^t

    自爆?建一个虚节点,所有点连向它即可。

    留在原地?自己向自己连边就可以了


    Code 

    #include<bits/stdc++.h>
    #define ll long long
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    inline int read()
    {
    	int x=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    	return x*f;
    }
    #define mod 2017
    #define reg register
    int N,M,u,v,T;
    struct matrix
    {
    	int a[35][35],size;
    	matrix(int _n=0,int _o=0):size(_n){memset(a,0,sizeof a);if(_o)for(reg int i=0;i<=size;i++) a[i][i]=1;}
        matrix operator *(const matrix& b)const
    	{
            matrix C(size);
            for(int i=0;i<=size;i++)for(int j=0;j<=size;j++)
            for(int k=0;k<=size;k++) C.a[i][j]+=(a[i][k]*b.a[k][j])%mod;
            return C;
        }
    };
    matrix fpow(matrix x,int m){
        matrix ret(N,1);
        for(;m;x=x*x,m>>=1) if(m&1) ret=ret*x;
        return ret;
    }
    int main()
    {
    	N=read();M=read();
    	register int i;matrix pac(N,1);
    	for(i=1;i<=N;++i) pac.a[i][0]++;
    	for(i=1;i<=M;++i) u=read(),v=read(),pac.a[u][v]++,pac.a[v][u]++;
    	pac=fpow(pac,read());
    	register int ans=0;
    	for(i=0;i<=N;++i) (ans+=pac.a[1][i])%=mod;
    	return 0*printf("%d
    ",ans);
    }
    


    Blog来自PaperCloud,未经允许,请勿转载,TKS!

  • 相关阅读:
    Android 4.4 通过源码进行 root 操作
    Android4.4 找不到内部存储空间
    极客时间《从零开始学大数据》学习总结
    C 语言实现 unix 时间戳转换成时间字符串
    数据库设计中各种键的含义
    Sqoop 快速入门
    Intelij idea新窗口打开项目设置
    安装配置Apache2.4和php7.0
    如何让 linux unzip 命令 不输出结果
    允许远程用户登录访问mysql的方法
  • 原文地址:https://www.cnblogs.com/PaperCloud/p/10244301.html
Copyright © 2011-2022 走看看