题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值
 
从这道题才知道邻接矩阵竟然可以乘 , 惊了 ! ! ! 矩阵真的不是白叫的 . 
虽然很容易推出是可行的但是还是觉得很神奇 . 
WA了几百次 , 后来发现是快速幂的问题 , 我还是不知道为什么 , 
我之前的快速幂因为不想初始化z都直接在第一次乘的时候特殊判断直接把x赋给z , 也没有出现问题 , 但是既然错了...就这样写吧 , 记住就好了 . 
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
const double eps=1e-;
const long long modn=;
int n,m;
struct mat{
int e[][];
mat(){
memset(e,,sizeof(e));
}
};
mat pro(mat x,mat y){
mat z;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
for(int k=;k<=n;k++){
z.e[i][j]+=x.e[i][k]*y.e[k][j];
z.e[i][j]%=;
}
}
}return z;
}
mat pow(mat x,int k){
mat z;
for(int i=;i<=n;i++){
z.e[i][i]=;
}
while(k){
if(k%==){
z=pro(z,x);
}
x=pro(x,x);
k/=;
}
return z;
}
int main(){
while(~scanf("%d%d",&n,&m)&&(m||n)){
mat a;
mat c;
int x,y,k;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
a.e[x+][y+]=;
}
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&k);
c=a;
c=pow(a,k);
int ans=c.e[x+][y+]%;
printf("%d\n",ans);
}
}
return ;
}

最新文章

  1. AE调用GP工具的方法(转)
  2. ORA-00907: 缺失右括号
  3. windows下监测tomcat7内存使用情况
  4. Hdu OJ 5115 Dire Wolf (2014ACM/ICPC亚洲区北京站) (动态规划-区间dp)
  5. UVa 11375 - Matches
  6. hadoop2 作业执行过程之yarn调度执行
  7. 关于同步VSS服务器上的代码发生Eclipse里面的项目全部不见了
  8. Linux Resin 安装
  9. vmware 新机克隆
  10. CKeditor使用js验证不得为空
  11. SpringCloud Alibaba-nacos注册中心
  12. IP通信基础学习第七周(下)
  13. Python爬虫-01:爬虫的概念及分类
  14. Numpy中的广播原则(机制)
  15. A1074. Reversing Linked List
  16. decimal, float 和double
  17. 在SELECT DISTINCT 状况下使用 Order BY Newid() 随机数选出记录
  18. Spring MVC - 拦截器实现 和 用户登陆例子
  19. sql注入的防御和挖掘
  20. 我学MSMQ(一)

热门文章

  1. placeholder样式设置
  2. 蓝色的oa模板html_综合信息服务管理平台OA模板——后台
  3. Windows降权
  4. Python3 多进程
  5. Linux系统调用、新增系统调用方法【转】
  6. laravel入门教程
  7. C# Winform频繁刷新导致界面闪烁解决方法
  8. java基础4 函数
  9. mini_httpd在RedHat 5下安装
  10. java并发编程实战笔记---(第五章)基础构建模块