【DP+矩阵乘法】BZOJ1875(SDOI2009)[HH去散步]题解
来源:互联网 发布:c语言中#的效果 编辑:程序博客网 时间:2024/05/17 01:45
题目概述
HH有个智障的习惯,喜欢饭后1073741824步走。
给出
ps:走过一条边后不能立刻返回。
解题报告
直接DP,由于不能立刻返回,所以定义
然后发现
但是这种简单题我傻X一样WA了3次QAQ。
示例程序
#include<cstdio>#include<algorithm>#define fr first#define sc second#define mp make_pairusing namespace std;const int maxm=120,MOD=45989;int m,st,A,B,ans;pair<int,int> e[maxm];struct Matrix{ int r,c,s[maxm][maxm]; void zero(int R,int C) { r=R;c=C; for (int i=0;i<r;i++) for (int j=0;j<c;j++) s[i][j]=0; } void unit(int C) {zero(C,C);for (int i=0;i<c;i++) s[i][i]=1;}};Matrix T,f,c;inline void AMOD(int &x,int tem) {if ((x+=tem)>=MOD) x-=MOD;}Matrix operator * (const Matrix &a,const Matrix &b){ c.zero(a.r,b.c); for (int i=0;i<c.r;i++) for (int j=0;j<c.c;j++) for (int k=0;k<a.c;k++) AMOD(c.s[i][j],a.s[i][k]*b.s[k][j]%MOD); return c;}inline Matrix Pow(Matrix w,int b){ static Matrix s;s.unit(w.c); while (b) {if (b&1) s=s*w;b>>=1;if (b) w=w*w;} return s;}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); scanf("%d%d%d%d%d",&m,&m,&st,&A,&B); for (int i=0;i<m;i++) scanf("%d%d",&e[i<<1].fr,&e[i<<1].sc),e[i<<1|1]=mp(e[i<<1].sc,e[i<<1].fr); m<<=1;T.zero(m,m); for (int i=0;i<m;i++) for (int j=0;j<m;j++) if (i!=(j^1)) if (e[i].sc==e[j].fr) T.s[i][j]++; f.zero(1,m);for (int i=0;i<m;i++) if (e[i].fr==A) f.s[0][i]++;f=f*Pow(T,st-1); for (int i=0;i<m;i++) if (e[i].sc==B) AMOD(ans,f.s[0][i]); return printf("%d\n",ans),0;}
阅读全文
1 0
- 【DP+矩阵乘法】BZOJ1875(SDOI2009)[HH去散步]题解
- 【bzoj1875】 SDOI2009 HH去散步 dp+矩阵乘法
- 【矩阵乘法优化DP】BZOJ1875 [SDOI2009]HH去散步
- BZOJ1875 [SDOI2009]HH去散步(矩阵乘法)
- 【BZOJ1875】[SDOI2009]HH去散步(矩阵乘法)
- [题解]bzoj1875(SDOI2009)HH去散步
- bzoj1875 [SDOI2009]HH去散步(矩阵)
- bzoj1875 HH去散步 矩阵乘法
- [BZOJ1875] [SDOI2009] HH去散步
- 【bzoj1875】【SDOI2009】【HH去散步】
- 【SDOI2009】【BZOJ1875】HH去散步
- bzoj1875: [SDOI2009]HH去散步
- [bzoj1875][SDOI2009]HH去散步
- BZOJ1875: [SDOI2009]HH去散步
- bzoj1875: [SDOI2009]HH去散步
- bzoj1875: [SDOI2009]HH去散步
- [BZOJ]1875: [SDOI2009]HH去散步 矩阵乘法优化DP
- [BZOJ1875][SDOI2009]HH去散步(矩阵快速幂)
- 内存管理策略!(13)
- MySQL UPDATE 查询整理
- django中模板高级用法
- 线性筛(欧拉筛法)简介(洛谷P3383)
- ViewDragHelper(二)- 源码及原理解读(进阶篇)
- 【DP+矩阵乘法】BZOJ1875(SDOI2009)[HH去散步]题解
- [雑談] 南の秋は最高の季節
- (网易2018校招笔试)[编程题] 相反数
- intellij struts2 json返回 [指定类成员json返回] 手动档
- POJ 2533
- 算法题:修表钟问题(微软2014在线测试题)
- 微信小程序,对象转换成数组
- Oracle 中的join大法
- GC之开篇