编程介的小学生
2018-12-08 16:26这个小问题,用算法解决的思路是什么,c语言
Problem Description
Mike has just found a dungeon. Inside there are n rooms and p treasure chests. Chests 1,...,p are located in room v1,...,vp respectively. The rooms are connected by n−1 passages. Any two rooms connected by a passage are considered adjacent. This dungeon is very special that there exists a path between any two rooms. Among these treasure chests, only chest 1 can be taken in the very beginning, others must be taken in order. That is, only after chest i is taken, may chest i+1 be taken as well, for every i∈{1,...,p−1}.
Mike is lazy, so he dislikes to explore the dungeon on his own feet. Therefore, Mike sends his robot dog, Blot, to collect the treasures in the dungeon. Blot can automatically collect the treasures from the chests, and it takes Blot exactly a second to move to any adjacent room. However, Blot’s movement is uncontrollable. Blot moves to all adjacent rooms with the same probability. For example, if there are k adjacent rooms, then Blot will move to any of them with probability 1k. Please help mike to compute the expected time that Blot collects all p treasures for him.
Input
The first line on the input contains an integer T(T≤10). There will be T test cases. The first line of each test case contains an integer n(2≤n≤50000) indicating the number of rooms in the dungeon. The rooms are numbered from 0 to n−1. Each of the following n−1 lines contains two integers u and v(u,v∈{0,...,n−1}) indicating room u and room v are adjacent.
The next line contains an integer q(q≤100) indicating the number of scenarios. Each of the following q lines represents a scenario which consists of some integers p,v0,v1,...,vp separated by blanks. The first integer p(0<p≤500) indicates there will be p treasure chests. The second integer v0 indicates that Blot is in room v0 at the beginning. For i∈{1,...,p}, the i−th treasure will be spawn at room vi. You may assume vi ≠ vi-1 for every i∈{1,...,p}.
Output
For each test case, output q lines, and the j−th of them corresponds to the j−th scenario of the test case. For each scenario, output the expected time in seconds such that Blot collects all treasures. Print the answer to the fourth decimal place, and separate two consecutive test cases with a blank line.
Sample Input
2
3
1 0
1 2
2
1 0 1
2 0 2 1
4
0 1
2 0
3 0
1
3 0 1 0 1
Sample Output
1.0000
5.0000
11.0000
- 点赞
- 回答
- 收藏
- 复制链接分享
1条回答
为你推荐
- 求思路,该怎么用递归算法使字符串倒序?
- c语言
- c++
- 1个回答
- 计算子数组最大和的一个问题,是不是需要DP的算法,采用C语言解决的思路是什么的?
- r语言
- Golang
- erlang
- 1个回答
- 一个姓名的匹配算法的实现过程的分解,数据结构C语言解决这个问题的思路方式
- r语言
- Golang
- erlang
- 1个回答
- 采用C语言解决这个距离远近的长短的判断的算法怎么实现?具体的思路谢谢
- r语言
- Golang
- erlang
- 1个回答
- 是一个记录去重的算法问题,需要使用C语言的思路去解决的办法?
- r语言
- Golang
- erlang
- 1个回答