这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残

这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行)再想交的时候已经开始hack了

真是TMD。。。。。。。,然后rejudge完了之后再HDOJ上瞬间AC,真是。。。狗了,只能是自己手残

手残,手残,手残(重要的事情说三遍)

思路 :(杭电官方题解,我就不班门弄斧了。。QAQ)

考虑dpdp,用f_{t,x}f​t,x​​表示第tt秒在xx的概率,初始时f_{0,u}=1f​0,u​​=1.

f_{t+1,y}=\sum_{x,x->y}{\frac{f_{t,x}}{Out_x}},Out_xf​t+1,y​​=∑​x,x−>y​​​Out​x​​​​f​t,x​​​​,Out​x​​表示xx的出度.

因为tt很大,而且发现每次的转移都是相同的,所以直接矩乘就好了.

复杂度是O(QN^3\log t)O(QN​3​​logt).

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=+;
const LL mod=1e9+;
vector<int>g[maxn];
int n,m;
LL xx[maxn][maxn],yy[maxn][maxn];
struct mat
{
LL x[maxn][maxn],y[maxn][maxn];
} o,res;
mat mul(mat a,mat b)
{
mat temp;
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
{
temp.x[i][j]=;
temp.y[i][j]=;
for(int k=; k<=n; ++k)
{
LL t1=a.x[i][k]*b.x[k][j]%mod;
LL t2=a.y[i][k]*b.y[k][j]%mod;
temp.x[i][j]=(temp.x[i][j]*t2%mod+temp.y[i][j]*t1%mod)%mod;
temp.y[i][j]=(temp.y[i][j]*t2)%mod;
}
}
return temp;
}
void cal(int c)
{
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
{
o.x[i][j]=xx[i][j];
o.y[i][j]=yy[i][j];
res.x[i][j]=,res.y[i][j]=;
}
for(int i=; i<=n; ++i)
res.x[i][i]=;
while(c)
{
if(c&)
res=mul(res,o);
c>>=;
o=mul(o,o);
}
}
LL getans(LL x,LL y)
{
int c=1e9+;
LL r=;
while(c)
{
if(c&)
r=(r*y)%mod;
c>>=;
y=(y*y)%mod;
}
r=(x%mod*r%mod);
return r;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(xx,,sizeof(xx));
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
yy[i][j]=;
for(int i=; i<=n; ++i)
g[i].clear();
for(int i=; i<m; ++i)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
}
for(int i=; i<=n; ++i)
{
for(int j=; j<g[i].size(); ++j)
xx[i][g[i][j]]=,yy[i][g[i][j]]=g[i].size();
}
int q;
scanf("%d",&q);
while(q--)
{
int u,k;
scanf("%d%d",&u,&k);
cal(k);
for(int i=; i<=n; i++)
printf("%I64d ",getans(res.x[u][i],res.y[u][i]));
printf("\n");
}
}
return ;
}

HDU 5607 graph 矩阵快速幂 + 快速幂的更多相关文章

  1. hdu 5607 graph (矩阵乘法快速幂)

    考虑一个经典的问题: 询问从某个点出发,走 k 步到达其它各点的方案数? 这个问题可以转化为矩阵相乘,所以矩阵快速幂即可解决. 本题思路: 矩阵经典问题:求从i点走k步后到达j点的方案数(mod p) ...

  2. HDU 5607 graph(矩阵优化+概率DP)

    该题非常easy想到求概率的转移方程:用d[i][j]表示第i步,走到j点的概率. 可是该题的k高达1e9.所以依照套路.要用矩阵相乘来优化. 第一次写矩阵相乘. 大概的意思就是利用矩阵实现递推. 而 ...

  3. HDU 5607 graph(DP+矩阵乘法)

    [题目链接] http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=663&pid=1002 [题意] 给定一个有向 ...

  4. HDU 5607 graph(矩阵乘法)

    题意 在一个 \(n\) 个节点 \(m\) 条边的有向图上随机游走,有 \(Q\) 个询问,每次给定一个起点 \(u\) 和步数 \(K\) ,每次回答最后停在每个节点的概率. \(1 \leq n ...

  5. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...

  6. HDU 5667 构造矩阵快速幂

    HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...

  7. HDU 4549 矩阵快速幂+快速幂+欧拉函数

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  8. hdu 5690 2016"百度之星" - 初赛(Astar Round2A) All X 快速二次幂 || 寻找周期

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690 题意:m个数字全为x mod k ?= c;其中m <= 1010,0 < c,k ...

  9. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

随机推荐

  1. visio

    为您的产品密钥: 7DNWX-MRX4G-QCGX2-DG6BP-DC8RP   http://technet.microsoft.com/zh-cn/evalcenter/hh973399.aspx ...

  2. ios实现截屏(转)

    -(UIImage*) makeImage {  UIGraphicsBeginImageContext(self.view.bounds.size);  [self.view.layer rende ...

  3. 主题: 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合DEDECMS

    作者: fmamcn, 发布日期: 2012-09-29 12:28:39, 浏览数: 1567 看了狼魂发表的将kindeditor中的代码高亮插件prettify换为SyntaxHighlight ...

  4. 简单3d RPG游戏 之 005 选择敌人

    选择一个敌人,按ctrl+d,复制出3个,调整一下它们的位置,不重叠,修改Tag为Enemy,禁用EnemyAI. 创建Targetting脚本,绑定到Player玩家对象 public class ...

  5. GitHub 有哪些优秀的项目

    GitHub 有哪些优秀的项目 http://www.zhihu.com/question/20584141

  6. HDFS入门详解

    一. 前提和设计目标 1. 硬件错误是常态,因此需要冗余,这是深入到HDFS骨头里面去了 HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据.我们面对的现实是构成系统的组件数目 ...

  7. Hibernate4.1.4配置二级缓存EHCache步骤

    1.当然首先引入EHCache相关的jar包 这些包不需要另外下载,在Hibernate官方网站下载Hibernate4.1.7的压缩包(如:hibernate-release-4.1.7.Final ...

  8. fill 函数

    fill函数的作用是:将一个区间的元素都赋予val值.函数参数:fill(first,last,val);//first为容器的首迭代器,last为容器的末迭代器,val为将要替换的值. 例题:给你n ...

  9. EXPORT_SYMBOL的作用是什么

    http://www.cnblogs.com/riskyer/p/3221805.html EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动 导入到 ...

  10. Servlet课程0425(六) 不经过验证直接跳转---session实现不同页面之间共享数据

    在地址栏直接输入http://localhost:8080/myWebSite/wel 会发现页面也能跳转,只不过用户名和密码都为空,这是不可以的,因为没有经过验证非法登录了 Welcome,hell ...