首页 技术 正文
技术 2022年11月15日
0 收藏 565 点赞 2,675 浏览 1696 个字

题目描述

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

输入输出格式

输入格式:

第一行输入两个正整数况N,M,N表示城市个数,M表示道路个数。(1 <= N <=30,0 < M < 100)

接下来M行输入u,v,表示u,v之间有一条道路。(1<=u,v <= n)保证两座城市之间只有一条路相连。

最后输入入时间t

输出格式:

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

输入输出样例

输入样例#1: https://www.cnblogs.com/Dxy0310/p/9838613.html

  题目所求的行为方案数可以理解为到每一个可到达的点的方案数的总和,而邻接矩阵的幂正好有这样的性质,

用邻接矩阵$A$表示原图的连通关系,那么$A^k$中的$(i,j)$上的数值表示从$i$到$j$经过$k$的路径方案总数。

那么$\sum\limits_{i=1}^{n} A[1][i]$就是答案的一部分,接下来考虑原地停留的问题,其实原地停留就相当于每个点都有一条自己连自己的边构成自环,将$A_{i,i}$赋值为$1$即可,再考虑自爆的情况,因为自爆之后便没有状态了,所以可以将自爆看成一个新的城市$n+1$,由于可能在每一个点上自爆,所以由每一个点向点$n+1$连一条有向边,由于自爆后没状态,所以点$n+1$的出边应该为$0$。

  至此题目就转化成了建立图的邻接矩阵$A$,并计算$A^k$,用矩阵快速幂即可。

代码:

  

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
#define INF 0x3f3f3f3f
#define maxn 39
#define maxm
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ll)(ch-'');ch=getchar();}
return x*f;
}
int mp[maxn][maxn],B[maxn][maxn],C[maxn][maxn];
int n,m,k,ans,tot,cnt,t,p;void Martix_mul(int A[maxn][maxn],int B[maxn][maxn])
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int k=;k<=n;k++)
C[i][j]+=A[i][k]*B[k][j],C[i][j]%=p;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
A[i][j]=C[i][j],C[i][j]=;
}
void Quick_mul(int b)
{
while(b)
{
if(b&)
Martix_mul(B,mp);
Martix_mul(mp,mp);
b>>=;
}
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read(),m=read(),p=;
for(int i=;i<=m;i++)
{
int x=read(),y=read();
mp[x][y]=mp[y][x]=;
}
for(int i=;i<=n+;i++)
{
mp[i][i]=;
mp[i][n+]=;
B[i][i]=;
}
t=read();
++n;
Quick_mul(t);
for(int i=;i<=n;i++)
ans+=B[][i],ans%=p;
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918