Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. from heapq import heappush as push
  2. from heapq import heappop as pop
  3. from collections import deque
  4.  
  5.  
  6. def get_ans(v):
  7. if v == -1:
  8. return
  9. get_ans(p[v])
  10. print(v)
  11.  
  12.  
  13. def bfs(start):
  14. q = deque()
  15. q.append(start)
  16. r1 = [10**10] * n
  17. r1[start] = 0
  18. while len(q):
  19. v = q.popleft()
  20. for x in g[v]:
  21. if r1[x[0]] > r1[v] + x[1]:
  22. r1[x[0]] = r1[v] + x[1]
  23. q.append(x[0])
  24. return r1
  25.  
  26.  
  27. n = int(input())
  28. sp_s = list([] for i in range(n))
  29. t = []
  30. r = [10 ** 10] * n
  31. r[0] = 0
  32. sp = []
  33. p = [-1] * n
  34. h = []
  35. for i in range(n):
  36. x, y = map(int, input().split())
  37. t.append(x)
  38. sp.append(y)
  39. for i in range(n - 1):
  40. x, y, rr = map(lambda o: int(o) - 1, input().split())
  41. sp_s[x].append([y, rr + 1])
  42. sp_s[y].append([x, rr + 1])
  43. push(h, (r[0], 0))
  44. while h:
  45. curr, v = pop(h)
  46. if curr > r[v]:
  47. continue
  48. r1 = bfs(v)
  49. for v1 in range(n):
  50. if v == v1:
  51. continue
  52. if r[v1] * sp[v1] > r[v] * sp[v1] + t[v1] * sp[v1] * sp[v1] + r1[v1]:
  53. r[v1] = r[v] + t[v1] + r1[v1] / sp[v1]
  54. p[v1] = v
  55. push(h, (r[v1], v1))
  56. ans = 0
  57. for i in range(n):
  58. if r[i] > r[ans]:
  59. ans = i
  60. print(r[ans])
  61. get_ans()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement