hdu5001---Walk

Walk

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

Total Submission(s): 651    Accepted Submission(s): 402

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

2014 ACM/ICPC Asia Regional Anshan Online

Recommend

hujie   |   We have carefully selected several similar problems for you:  5153 5152 5151 5150 5149

此题的状态是想到了,但是含义没搞对,本来想把到达某个点的概率求出来,然后用1去减就是答案,但是是不对的,因为那部分概率是有牵连的

设dp[i][j] 表示走了j步,目前在节点i,且路径中不含节点u的概率

最后只要累计出节点u以外其他点的概率和就行

/*************************************************************************
    > File Name: hdu4945.cpp
    > Author: ALex
    > Mail: [email protected]
    > Created Time: 2014年12月30日 星期二 19时34分57秒
 ************************************************************************/

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int D = 10010;
const int N = 55;
double dp[N][D];
int n, m, d;
vector <int> edge[N];

void DP(int u)
{
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 0; j <= d; ++j)
		{
			dp[i][j] = 0;
		}
	}
	for (int i = 1; i <= n; ++i)
	{
		dp[i][0] = (1.0 / (double)n);
	}
	for (int i = 0; i < d; ++i)
	{
		for (int j = 1; j <= n; ++j)
		{
			if (j == u)
			{
				continue;
			}
			int cnt = edge[j].size();
			for (int k = 0; k < cnt; ++k)
			{
				int v = edge[j][k];
				if (v == u)
				{
					continue;
				}
				dp[j][i + 1] += dp[v][i] * (1.0 / cnt);
			}
		}
	}
	double ans = 0;
	for (int i = 1; i <= n; ++i)
	{
		if (i == u)
		{
			continue;
		}
		ans += dp[i][d];
	}
	printf("%.10f\n", ans);
}

int main()
{
	int t;
	int u, v;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d%d%d", &n, &m, &d);
		for (int i = 1; i <= n; ++i)
		{
			edge[i].clear();
		}
		for (int i = 1; i <= m; ++i)
		{
			scanf("%d%d", &u, &v);
			edge[u].push_back(v);
			edge[v].push_back(u);
		}
		for (int i = 1; i <= n; ++i)
		{
			DP(i);
		}
	}
	return 0;
}
时间: 2024-10-12 23:11:28

hdu5001---Walk的相关文章

CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)

CMD命令 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) appwiz.cpl:程序和功能 calc:启动计算器 certmgr.msc:证书管理实用程序 charmap:启动字符映射表 chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符) cleanmgr: 打开磁盘清理工具 cliconfg:SQL SERVER 客户端网络实用工具 cmstp:连接管理器配置文件安装程序 cmd.exe:CMD命令提示符 自动关机命令

ios-表视图-demo-自定义cell和心得

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellindentifier=@"cell"; if (self.celltype==KTableViewCellContenview) {//第一种自定义cell UITableViewCell *cell = [tableView dequ

UI-UIView--UIViewController

-------------UIView------------- 1.创建 UIView *view = [[UIView alloc]init]; 2.设置位置 view.frame = CGRectMake(10, 40, 100, 200); 3.显示 [self.window addSubview:view]; 4.背景色 view.backgroundColor = [UIColor blueColor]; 5.设置中心  当中心改变的时候,视图的位置会随着中心的改变而改变.大小不变

写时拷贝(copy-on-write) COW技术

时间:2014.05.06 地点:基地二楼 ---------------------------------------------------------------------------------- 一.写时拷贝的概念--COW技术在Linux进程上的应用 Linux在使用fork()函数进程创建时,传统fork()的做法是系统把所有的资源复制给新创建的进程,这种方式不仅单一,而且效率低下.因为所拷贝的数据或别的资源可能是可以共享的.现在Linux的fork()使用写时拷贝页来实现新进

图像处理-线性滤波-2 图像微分(1、2阶导数和拉普拉斯算子)

更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分.由于它们滤除高频和低频,因此称为带通滤波器(band-pass filters). 在介绍具体的带通滤波器前,先介绍必备的图像微分知识. 1 一阶导数 连续函数,其微分可表达为 ,或                         (1.1) 对于离散情况(图像),其导数必须用差分方差来近似,有 ,前向差分 forward differencing                  (1.2)  ,中心差分 central

我的几个linux相关软件的配置文件 vim,emacs,emacs-org-module,git。shell

vim 配置文件: https://github.com/ChenWenHuan/vimConfig emacs配置: https://github.com/ChenWenHuan/emacs.d_config git emacs org mode :modules: https://github.com/ChenWenHuan/org-mode-modules git配置: https://github.com/ChenWenHuan/gitConfig shell config: add f

第一篇 理论 1.7 精进-正念-正知,如理作意和觉察力 - 阿姜念&#183;身念处禅观修法

http://www.tlfjw.com/xuefo-504221.html 1.7精进-正念-正知,如理作意和觉察力 定义: a)Atapi意即「精进」. b)Sati意即「正念」.有两种正念(所有的正念都是善法,而不要和日常生活的「集中注意力」混淆在一起,这只是一种想). 1)一般或世间的正念是以观察力(明觉)做任何善行——如供养僧人托钵的食物等等. 2)四念处修法中的正念是当下念住于观照的所缘,如身或心. c)Sampajanna意即「清楚认知」.它总是与正念配合在一起的,例如,知道坐姿的

OC--单例--NSDate--归档--json--plist--协议

-------单例-------- 定义:一个类只允许创建一个对象,在任何地方调用对象方法或属性的时候,只能通过这个对象.注意:一般在单例类里面只创建有限的类方法. 作用:1.一个类只能有一个对象的时候,并且从一个大家都熟知的访问点访问它 2.保存值 //1.将本类的对象设置静态的,这样就能保证对象的唯一性. //manage是全局的 static  SetUpManage *manage  = nil; +(SetUpManage *)sharedManage{ @synchronized(s

2019-2020-1 20191312《信息安全专业导论》第十周学习总结

2019-2020-1 20191312<信息安全专业导论>第十周学习总结 教材内容总结 本周学习了应用程序层,从信息系统,人工智能到模拟.图形学.游戏和其他应用,我对计算机的理解更加深入了.这一部分既有实用的电子表格.数据库,高大上的人工智能,又有特别好玩的游戏.通过学习这些内容,我掌握了应用层的一些相关概念,会使用电子表格和数据库去处理一些问题. 上周错题 原文地址:https://www.cnblogs.com/lxy2019/p/12008162.html

2019-2020-1 20191312《信息安全专业导论》第十一周学习总结

2019-2020-1 20191312<信息安全专业导论>第十一周学习总结 教材内容总结 本周学习了十五.十六两章,我对网络有了更深的了解.web和internet的区别,我们看见的网页是如何工作的,我们又是怎么访问这些网页获取数据的这些都在这周得到了解答.同时,我也了解了HTML语言,并亲手制作了一个个人网站.学习了TCP协议,初次运用wireshark对TCP进行了深入学习.使用了ssh控制别人的机器,使用了nmap扫描周围网络. 上周错题 本周博文 https://www.cnblog