1からまでの番号が付けられた頂点を持つn個の頂点で構成される無向ツリーを作成し n
ます。カエルは頂点1からジャンプし ます。ルールは次のとおりです。
- それは現在の蛙飛びされた第二の、内の別の頂点 未訪問 の頂点処理し(それらが直接結合している場合)。
- カエルは、訪れた頂点にジャンプすることはできません。
- カエルが多くの異なる頂点にジャンプできる場合、それらのいずれかにジャンプする可能性は同じです。
- カエルが未訪問の頂点にジャンプできない場合、カエルはジャンプするたびにその場所に留まります。
無向アレイを有するツリーエッジは edges
、記載されて edges[i] = [fromi, toi]
直接通信手段の存在 fromi
と toi
2つの頂点の縁。
カエルがt
秒後にターゲット頂点に target
ある確率を返します 。
例1:
入力: n = 7、エッジ= [[1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]]、t = 2 target = 4 出力: 0.16666666666666666 説明:上の図は、カエルのジャンプパスを示しています。頂点からカエル1つのオフ、第1の第 2頂点1/3スキップの確率で、そして第2秒間 2秒位置する頂点確率が1/3である4カエルそう後4頂点1/2スキップの確率で、 * 1/2 = 1/6 = 0.16666666666666666。
例2:
入力: n = 7、エッジ= [[1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]]、t = 1 target = 7 出力: 0.3333333333333333 説明:上の図は、カエルのジャンプパスを示しています。カエルは頂点1 からジャンプし、1/3 = 0.3333333333333333の確率で1秒で頂点7にジャンプします。
例3:
入力: n = 7、エッジ= [[1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]]、t = 20ターゲット= 6 出力: 0.16666666666666666
ヒント:
1 <= n <= 100
edges.length == n-1
edges[i].length == 2
1 <= edges[i][0], edges[i][1] <= n
1 <= t <= 50
1 <= target <= n
- 正確な値の誤差
10^-5
内の結果が正しいと判断されます。
私のコード:
class Solution:
def frogPosition(self, n: int, edges: List[List[int]], t: int, target: int) -> float:
from collections import defaultdict
graph = defaultdict(set)
for e in edges:
start, end = e[0], e[1]
if start > end:
start, end = end, start
graph[start].add(end)
chance, s, step = 1, [(1,1)], 0
while s and step <= t:
n_s = []
for node, chance in s:
if node == target and step == t:
return chance
if len(graph[node]):
n_chance = 1/len(graph[node])
for n in graph[node]:
n_s.append((n,chance*n_chance))
else:
n_s.append((node,chance))
step+=1
s = n_s
return 0