概率DP

dp[j][d] 表示不经过i点走d步到j的概率, dp[j][d]=sigma ( dp[k][d-1] * Probability )

ans = sigma ( dp[j][D] )

Walk

Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 401    Accepted Submission(s): 261

Special Judge

Problem Description
I used to think I could be anything, but now I know that I couldn't do anything. So I started traveling.



The nation looks like a connected bidirectional graph, and I am randomly walking on it. It means when I am at node i, I will travel to an adjacent node with the same probability in the next step. I will pick up the start node randomly (each node in the graph
has the same probability.), and travel for d steps, noting that I may go through some nodes multiple times.



If I miss some sights at a node, it will make me unhappy. So I wonder for each node, what is the probability that my path doesn't contain it.
 
Input
The first line contains an integer T, denoting the number of the test cases.



For each test case, the first line contains 3 integers n, m and d, denoting the number of vertices, the number of edges and the number of steps respectively. Then m lines follows, each containing two integers a and b, denoting there is an edge between node
a and node b.



T<=20, n<=50, n-1<=m<=n*(n-1)/2, 1<=d<=10000. There is no self-loops or multiple edges in the graph, and the graph is connected. The nodes are indexed from 1.
 
Output
For each test cases, output n lines, the i-th line containing the desired probability for the i-th node.



Your answer will be accepted if its absolute error doesn't exceed 1e-5.
 
Sample Input
2
5 10 100
1 2
2 3
3 4
4 5
1 5
2 4
3 5
2 5
1 4
1 3
10 10 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
4 9
 
Sample Output
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.6993317967
0.5864284952
0.4440860821
0.2275896991
0.4294074591
0.4851048742
0.4896018842
0.4525044250
0.3406567483
0.6421630037
 
Source
 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector> using namespace std; const int maxn=10010; int n,m,D;
vector<int> g[maxn];
double dp[55][maxn]; int main()
{
int T_T;
scanf("%d",&T_T);
while(T_T--)
{
scanf("%d%d%d",&n,&m,&D);
for(int i=0;i<=n+1;i++) g[i].clear();
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
for(int i=1;i<=n;i++)
{
memset(dp,0,sizeof(dp));
for(int j=1;j<=n;j++)
{
if(i!=j) dp[j][0]=1.0/n;
} for(int d=1;d<=D;d++)
{
for(int j=1;j<=n;j++)
{
if(j==i) continue;
for(int k=0,sz=g[j].size();k<sz;k++)
{
int v=g[j][k];
if(v!=i) dp[j][d]+=dp[v][d-1]*(1./g[v].size());
}
}
} double ans=0.0;
for(int j=1;j<=n;j++)
{
if(i!=j) ans+=dp[j][D];
}
printf("%.10lf\n",ans);
}
}
return 0;
}

最新文章

  1. ValueInjecter----最好用的OOM(以微信消息转对象举例)
  2. POJ 2255. Tree Recovery
  3. 轮播插件unsilder 源码解析(二)
  4. vuejs mvvm图解
  5. rabbitmq之amqp queue
  6. 1074, &quot;Column length too big for column &#39;err_solution&#39; (max = 21845); use BLOB or TEXT instead&quot;
  7. 【转】Asp.net中时间格式化的6种方法详细总结
  8. Activiti 多个并发子流程的应用
  9. 解除網頁無法選取文字、鎖右鍵限制:Enable Copy(Chrome 擴充套件)
  10. SystemTap----常用变量、宏、函数和技巧
  11. (转)asp.net 使用cookie完成记住密码自动登录
  12. ubuntu下MySQL修改root密码的多种方法,phpmyadmin空密码无法登陆的解决方法
  13. Springboot security cas源码陶冶-CasAuthenticationFilter
  14. 百度TTS的来由
  15. Python+Selenium+Pycharm
  16. Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1
  17. PHP获取网络图片并保存在本地目录
  18. Docker的脚本安装
  19. Js把Json序列化为Java接受的对象。
  20. How to write a professional email?

热门文章

  1. 轻松学习Linux之用户账户管理及实例
  2. 对ng-repeat的表格内容添加不同样式:ng-style
  3. CISP/CISA 每日一题 18
  4. 2018/8/21 qbxt测试
  5. 51 nod 1189 阶乘分数
  6. 关于android主线程异常NetworkOnMainThread不能訪问网络
  7. D3.js中对array的使用
  8. js取对象的属性值循环
  9. HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)
  10. 把java程序打包成.exe