博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC日记——[SDOI2009]HH去散步 洛谷 P2151
阅读量:7243 次
发布时间:2019-06-29

本文共 1654 字,大约阅读时间需要 5 分钟。

 

思路;

  矩阵快速幂递推(类似弗洛伊德);

  给大佬跪烂~~

 

代码:

#include 
using namespace std;#define mod 45989struct MatrixType { int n,m,ai[120][120]; MatrixType(int n_,int m_) { n=n_,m=m_; for(int i=0;i<=n;i++) { for(int j=0;j<=m;j++)ai[i][j]=0; } } MatrixType operator*(const MatrixType pos)const { MatrixType res(n,pos.m); for(int i=0;i<=res.n;i++) for(int j=0;j<=res.m;j++) for(int v=0;v<=m;v++) res.ai[i][j]=(res.ai[i][j]+ai[i][v]*pos.ai[v][j])%mod; return res; }};int n,m,t,a,b,cnt=-1,E[200],V[200],head[200];bool ma[60][60];inline void in(int &now){ char Cget=getchar();now=0; while(Cget>'9'||Cget<'0')Cget=getchar(); while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); }}MatrixType poww(MatrixType x,MatrixType y,int e){ while(e) { if(e&1) x=x*y; y=y*y,e>>=1; } return x;}int main(){ memset(head,-1,sizeof(head)); in(n),in(m),in(t),in(a),in(b); int u,v; for(int i=1;i<=m;i++) { in(u),in(v); E[++cnt]=head[u],V[cnt]=v,head[u]=cnt; E[++cnt]=head[v],V[cnt]=u,head[v]=cnt; } MatrixType bi(cnt,cnt); for(int i=0;i<=cnt;i++) { for(int v=head[V[i]];v!=-1;v=E[v]) { if(v!=(i^1)) bi.ai[i][v]++; } } MatrixType ai(0,cnt); for(int i=head[a];i!=-1;i=E[i]) ai.ai[0][i]++; MatrixType ans=poww(ai,bi,t-1); int ans_=0; for(int i=0;i<=ans.m;i++) if(V[i]==b)ans_=(ans_+ans.ai[0][i])%mod; printf("%d",ans_); return 0;}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6958874.html

你可能感兴趣的文章
2018/9/26 10.36
查看>>
【模拟】牛慢跑
查看>>
元素的显示和隐藏:display、visibility、overflow
查看>>
各管理相关的工具和技术
查看>>
『004』索引-Python
查看>>
安装第三方模块
查看>>
SMTP
查看>>
用CSS实现的图片透明度链接效果代码
查看>>
大牛给计算机专业的七个建议
查看>>
[SAN4N学习笔记]使用SysTick精准延时
查看>>
C++ auto_ptr
查看>>
Alpha阶段项目展示
查看>>
zzz KVC/KVO原理详解及编程指南
查看>>
window对象
查看>>
IntelliJ IDEA配置Tomcat 与安装Tomcat失败原因
查看>>
详解Android属性动画
查看>>
【转】关于MySQL函数GROUP_CONCAT的使用
查看>>
正则表达式 处理选项
查看>>
【哈希】身份证问题
查看>>
接口、继承、多态
查看>>