Description

HH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校的地图(假设每条路的长度都是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符合条件的路径
Input

第一行:五个整数N,M,t,A,B。其中N表示学校里的路口的个数,M表示学校里的 路的条数,t表示HH想要散步的距离,A表示散步的出发点,而B则表示散步的终点。 接下来M行,每行一组Ai,Bi,表示从路口Ai到路口Bi有一条路。数据保证Ai = Bi,但 不保证任意两个路口之间至多只有一条路相连接。 路口编号从0到N − 1。 同一行内所有数据均由一个空格隔开,行首行尾没有多余空格。没有多余空行。 答案模45989。
Output

一行,表示答案。
Sample Input

4 5 3 0 0

0 1

0 2

0 3

2 1

3 2
Sample Output

4
HINT

对于30%的数据,N ≤ 4,M ≤ 10,t ≤ 10。
对于100%的数据,N ≤ 20,M ≤ 60,t ≤ 230,0 ≤ A,B

Source

Day1

矩乘DP.
根据边的关系建出矩阵然后做快速幂.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 250
#define P 45989
using namespace std;
int n,m,t,A,B;
int top=1,size;
int ans;
struct edge
{int from,to,num;edge *next;
}e[MAXN<<1],*prev[MAXN];
void insert(int u,int v)
{e[++top].to=v;e[top].next=prev[u];prev[u]=&e[top];e[top].num=top;e[top].from=u;
}
struct matrix
{int a[MAXN][MAXN];matrix(){memset(a,0,sizeof(a));}friend matrix operator *(matrix A,matrix B){matrix ret;for (int i=1;i<=size;i++)for (int j=1;j<=size;j++)for (int k=1;k<=size;k++)ret.a[i][j]=(ret.a[i][j]+A.a[i][k]*B.a[k][j])%P;return ret;}friend matrix operator ^(matrix x,int k){matrix ret;for (int i=1;i<=size;i++)   ret.a[i][i]=1;for (int i=k;i;i>>=1,x=x*x)if (i&1)    ret=ret*x;return ret;}
}st,tmp;
int main()
{scanf("%d%d%d%d%d",&n,&m,&t,&A,&B);for (int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);insert(u,v);insert(v,u);}size=top;for (edge *i=prev[A];i;i=i->next)   st.a[1][i->num]++;for (int i=2;i<=top;i++)for (int j=2;j<=top;j++)if (e[i].to==e[j].from&&i!=(j^1))   tmp.a[i][j]++;st=st*(tmp^(t-1));for (edge *i=prev[B];i;i=i->next)   ans+=st.a[1][i->num^1];ans%=P;printf("%d\n",ans);
}

【SDOI2009】【BZOJ1875】HH去散步相关推荐

  1. 【BZOJ1875/SDOI2009】HH去散步

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB                                       ...

  2. bzoj1875 HH去散步

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...

  3. P2151 [SDOI2009]HH去散步

    P2151 [SDOI2009]HH去散步 题意: HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻 ...

  4. BZOJ 1875[SDOI2009]HH去散步

    题面: 1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1750  Solved: 851 [Submit] ...

  5. 迎开学水题狂欢赛(舞踏会[dp+三叉树],HH去散步[矩阵快速幂],排序[模拟],铁路旅行[线段树])

    快速简单记录老师口胡(可能就我自己看得懂了吧-) 文章目录 T1:舞踏会 title solution code T2:HH去散步 title solution code T3:排序 title so ...

  6. [BZOJ1975]HH去散步 图论+矩阵

    [BZOJ1975]HH去散步 图论+矩阵 题目大意 要求出在一个m条边,n个点的图中,相邻两次走的边不能相同,求在t时间时从起点A走到终点B的路径方案总数.将答案mod45989 输入格式: 第一行 ...

  7. bzoj1875 [SDOI2009]HH去散步 偏移+化边+矩乘

    这个题一看便知是矩乘,但是有限制条件:不能往回走 其实正常的想法应该是记录来向然后容斥,但在减答案的时候是子问题递归的,所以容斥不行 然后可以记录路径终点的前继和起点的后继,但复杂度不科学 由于点与点 ...

  8. BZOJ1875: [SDOI2009]HH去散步

    矩乘,因为不能走刚走过的边,所以矩阵里面的位置代表边,一个条边的两端开两个点放进矩阵里,这个点的值代表刚走过这条边走到这个点的方案数 code #include<set> #include ...

  9. 【Bzoj1875】HH去散步

    题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...

最新文章

  1. 笔记-中项案例题-2021年上-范围管理
  2. sqlserver 查看进程以及查看死锁代码
  3. MyBatis学习总结(6)——调用存储过程
  4. 08系统服务器多开教程,一个四开战士的多开工具 宏及经验全面教程
  5. 阳历时间转换为农历时间
  6. 小白也能开始VCS+Verdi的旅程
  7. linux退出编辑菱宏,Confluence 6 空间中的常用宏
  8. 外贸网络营销搜索引擎和B2B模式比较
  9. Java 8中 直接通过List进行分组求和
  10. 【真北直播预报】让你的对话更有力,使十维宇宙不坠落
  11. Python : numpy花式切片
  12. c语言打印红色爱心(程序员的浪漫)
  13. SQLite数据库database is locked解决
  14. Linux中chkconfig工具详解(世间有许多美好的东西,但真正属于自己的却并不多)
  15. 5G车路协同自动驾驶应用研究
  16. 月入过万——网店推广实战方法(第2版)
  17. AnswerOpenCV(0826-0901)一周佳作欣赏
  18. excel表格中如何设置下拉菜单
  19. fastjson解析接口json格式数据
  20. 弘辽科技:拼多多进军社区团购,多多买菜能否为其注入动力?

热门文章

  1. 《绝版游戏之信长之野望12—“统一日本的游戏“》
  2. Vivado 与 Vitis 2022.1 安装记录
  3. 最新Freewind自由之风主题最新版+Typecho内核
  4. 使用 Gitbook 打造你的电子书
  5. win10用户和计算机,对于电脑工作者们,更喜欢用win7还是win10呢?
  6. [BJOI2019]勘破神机(第一类斯特林数,斐波那契数列)
  7. H-Chat:用户私聊群聊管理
  8. 私域流量池怎么运营?从三个点去考虑
  9. 家政预约系统开发作用和步骤
  10. 物体识别桌 开发系列之一