Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. mx = 10**18
  2. fib = [0 for _ in range(10**5)]
  3. fib[0] = 1
  4. fib[1] = 1
  5. rfib = {}
  6. rfib[1] = 1
  7. for i in range(2, len(fib)):
  8.     fib[i] = fib[i-1] + fib[i-2]
  9.     if fib[i] > mx:
  10.         break
  11.     rfib[fib[i]] = i
  12.  
  13. n, m = map(int, input().split())
  14. heights = list(map(int, input().split()))
  15. mansions = list(range(n))
  16. pred = {a:[] for a in mansions}
  17. for i in range(m):
  18.     a, b  = map(int, input().split())
  19.     a -= 1
  20.     b -= 1
  21.     ha = heights[a]
  22.     hb = heights[b]
  23.     if ha in rfib and hb in rfib:
  24.         if rfib[ha] == rfib[hb] + 1:
  25.             pred[a].append(b)
  26.         elif rfib[hb] == rfib[ha] + 1:
  27.             pred[b].append(a)
  28.         if ha == hb and ha == 1:
  29.             pred[a].append(b)
  30.             pred[b].append(a)
  31. mansions = sorted(mansions, key=heights.__getitem__)
  32. visited = [1]*n
  33. for i in range(n):
  34.     M = mansions[i]
  35.     if heights[M] == 1 and len(pred[M]) > 0:
  36.         visited[M] = 2
  37.     elif heights[M] in rfib:
  38.         visited[M] = max([visited[j] for j in pred[M]]+[0])+1
  39.  
  40.  
  41. has_any_fib = False
  42.  
  43. for i in range(n):
  44.     if heights[i] in rfib:
  45.         has_any_fib = True
  46.         break
  47.  
  48. if not has_any_fib:
  49.     print(0)
  50. else:
  51. print(max(visited))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement