Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from heapq import heappush as push
- from heapq import heappop as pop
- from collections import deque
- def get_ans(v):
- if v == -1:
- return
- get_ans(p[v])
- print(v)
- def bfs(start):
- q = deque()
- q.append(start)
- r1 = [10**10] * n
- r1[start] = 0
- while len(q):
- v = q.popleft()
- for x in g[v]:
- if r1[x[0]] > r1[v] + x[1]:
- r1[x[0]] = r1[v] + x[1]
- q.append(x[0])
- return r1
- n = int(input())
- sp_s = list([] for i in range(n))
- t = []
- r = [10 ** 10] * n
- r[0] = 0
- sp = []
- p = [-1] * n
- h = []
- for i in range(n):
- x, y = map(int, input().split())
- t.append(x)
- sp.append(y)
- for i in range(n - 1):
- x, y, rr = map(lambda o: int(o) - 1, input().split())
- sp_s[x].append([y, rr + 1])
- sp_s[y].append([x, rr + 1])
- push(h, (r[0], 0))
- while h:
- curr, v = pop(h)
- if curr > r[v]:
- continue
- r1 = bfs(v)
- for v1 in range(n):
- if v == v1:
- continue
- if r[v1] * sp[v1] > r[v] * sp[v1] + t[v1] * sp[v1] * sp[v1] + r1[v1]:
- r[v1] = r[v] + t[v1] + r1[v1] / sp[v1]
- p[v1] = v
- push(h, (r[v1], v1))
- ans = 0
- for i in range(n):
- if r[i] > r[ans]:
- ans = i
- print(r[ans])
- get_ans()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement