bzoj 1875: [SDOI2009]HH去散步 动态规划+矩阵乘法
来源:互联网 发布:韩国爱情电影 知乎 编辑:程序博客网 时间:2024/05/30 23:01
题意
给出一个无向图,问从点s出发到点e经过t条边有多少种不同的路径,不能走回头路。
分析
一开始看:我擦这不就是个傻逼矩阵乘法题吗。
再一看:我擦居然不能回头,不会了2333
但是我们可以注意到边数并不多,于是有个很棒棒的idea就是对边进行dp然后矩阵乘法优化即可。
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define N 125#define MOD 45989using namespace std;int n,m,t,sta,end,cnt,last[N],b[N],c[N];struct arr{int a[N][N];}a;struct edge{int to,next;}e[N];void addedge(int u,int v){ e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt; e[++cnt].to=u;e[cnt].next=last[v];last[v]=cnt;}void mul(arr &c,arr a,arr b){ memset(c.a,0,sizeof(c.a)); for (int i=1;i<=cnt;i++) for (int j=1;j<=cnt;j++) for (int k=1;k<=cnt;k++) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%MOD)%MOD;}arr ksm(arr x,int y){ arr ans=x;y--; while (y) { if (y&1) mul(ans,ans,x); mul(x,x,x);y>>=1; } return ans;}int main(){ scanf("%d%d%d%d%d",&n,&m,&t,&sta,&end); sta++;end++;cnt=1; for (int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); x++;y++; addedge(x,y); } for (int i=2;i<=cnt;i++) for (int j=2;j<=cnt;j++) if (e[j].to==e[i^1].to&&i!=(j^1)) a.a[j][i]=1; a=ksm(a,t-1); for (int i=2;i<=cnt;i++) if (e[i^1].to==sta) b[i]=1; for (int j=1;j<=cnt;j++) for (int k=1;k<=cnt;k++) c[j]=(c[j]+b[k]*a.a[k][j]%MOD)%MOD; int ans=0; for (int i=2;i<=cnt;i++) if (e[i].to==end) ans=(ans+c[i])%MOD; printf("%d",ans); return 0;}
0 0
- bzoj 1875: [SDOI2009]HH去散步 动态规划+矩阵乘法
- BZOJ-1875-HH去散步-SDOI2009-矩阵乘法
- BZOJ 1875 [SDOI2009]HH去散步 矩阵乘法
- [BZOJ]1875: [SDOI2009]HH去散步 矩阵乘法优化DP
- 1875: [SDOI2009]HH去散步 矩阵乘法
- [DP 矩阵快速幂] BZOJ 1875 [SDOI2009]HH去散步
- bzoj 1875: [SDOI2009]HH去散步(矩阵优化DP)
- BZOJ 1875 [SDOI2009]HH去散步 (矩阵快速幂)
- 【BZOJ】1875 [SDOI2009]HH去散步 DP+矩阵优化
- 【BZOJ 1875】 [SDOI2009]HH去散步
- 【47.40%】【BZOJ 1875】[SDOI2009]HH去散步
- BZOJ 1875 [SDOI2009] HH去散步
- bzoj 1875 [SDOI2009]HH去散步
- BZOJ 1875 [SDOI2009]HH去散步
- BZOJ 1875 [SDOI2009]HH去散步
- [BZOJ 1875] SDOI 2009 HH去散步 · 矩阵乘法
- BZOJ-1875 HH去散步 DP+矩阵乘法快速幂
- BZOJ1875 [SDOI2009]HH去散步(矩阵乘法)
- usbmuxd进行ssh连接-iOS逆向工程
- 路由器级联设置
- Php中使用Select 查询语句的实例
- MySQL数据库设计总结
- vi文件保存退出命令":wq"和":x"的区别
- bzoj 1875: [SDOI2009]HH去散步 动态规划+矩阵乘法
- ubuntu Failed to fetch 404 错误解决
- UnicodeDecodeError的解决
- rsyslog 的rsyslog.conf配置详解
- LeetCode 160. Intersection of Two Linked Lists(C++版)
- AnglurJS将金额转换为大写金额
- 像差与zernike多项式
- 佟刚老师javaweb笔记(二)
- win7系统开发hadoop时遇到的问题总结