graphTime Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 103 Accepted Submission(s): 53
Problem Description
In a directed graph which has
N points and
M edges,points are labled from 1 to n.At first I am at point
u,at each step I will choose an output edge of the current point at uniform random,for every point
Z,please output the possibility of reaching the point
Z,moving exactly
K steps.
Input
the first line contains two positive interges
N,M,means the number of points and edges.
next M lines,contains two positive intergers X,Y,means an directed edge from X to Y. next line there is an integer Q,means the number of queries. next Q lines,each line contains two integers u,K,means the first point and number of the steps. N≤50,M≤1000,Q≤20,u≤N,K≤109. Every point have at least one output edge.
Output
Q lines,each line contains
N numbers,the
i-th number means the possibility of reaching point
i from
u,moving exactly
K steps.
In consideration of the precision error,we make some analyses,finding the answer can be represented as the form like XY,you only need to output X×Y109+5 mod (109+7). You need to output an extra space at the end of the line,or you will get PE.
Sample Input
3 2 1 2 1 3 1 1 1
Sample Output
0 500000004 500000004 I am now at point $1$,by one move,with a possibity of $\frac{1}{2}$ of reaching point 2,with a possibity of $\frac{1}{2}$ of reaching point 3,so we need to output 0 0.5 0.5,but as what is said above,we need to output$1*2^{10^9+5}~mod~{10^9+7}=500000004$.
|
在一个N个点(标号1~n),M条边的有向图上,一开始我在点u,每一步我会在当前点的出边中等概率的选一条走过去,求走了恰好K步后走到每个点的概率.
第一行两个正整数N,M,表示点数和边数. 接下来M行,每行两个正整数X,Y.表示一条X向Y的一条有向边(保证没有重边和自环). 接下来一个正整数Q,表示询问个数. 接下来Q行,每行两个正整数u,K,表示开始的点和步数. N≤50,M≤1000,Q≤20,u≤n,K≤109. 每个点保证至少有一个出边.
Q行,每行N个数字,用空格隔开,第i个数字表示从u开始走K步到i的概率. 考虑到输出的答案可能会有精度问题,经过一定的分析后可以发现答案一定可以被表示成YX的形式,你只需输出X×Y109+5 mod (109+7)的值即可. 在每行后面多输出一个空格,否则可能会使你PE.
3 2 1 2 1 3 1 1 1
0 500000004 500000004
这是一个三个点,两条边的有向图,它们分别是(1−>2,1−>3).现在在1号点,走了一步后,有1/2的概率走到了2,有1/2的概率走到了3,本来应该输出 0 0.5 0.5 而根据上面所说的,应输出1∗2109+5 mod (109+7)=500000004.
只能说自己太SB了!!!
思路:设置P[k][i]为第k步到达i点的概率。
那么P[k+1][i] = sigma(P[k][j] * idv(degree[j])) (1 <= j <= N && Map[j][i] == 1)。
求的时候设个逆元就好了,最后结果是一样的。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include