Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mx = 10**18
- fib = [0 for _ in range(10**5)]
- fib[0] = 1
- fib[1] = 1
- rfib = {}
- rfib[1] = 1
- for i in range(2, len(fib)):
- fib[i] = fib[i-1] + fib[i-2]
- if fib[i] > mx:
- break
- rfib[fib[i]] = i
- n, m = map(int, input().split())
- heights = list(map(int, input().split()))
- mansions = list(range(n))
- pred = {a:[] for a in mansions}
- for i in range(m):
- a, b = map(int, input().split())
- a -= 1
- b -= 1
- ha = heights[a]
- hb = heights[b]
- if ha in rfib and hb in rfib:
- if rfib[ha] == rfib[hb] + 1:
- pred[a].append(b)
- elif rfib[hb] == rfib[ha] + 1:
- pred[b].append(a)
- if ha == hb and ha == 1:
- pred[a].append(b)
- pred[b].append(a)
- mansions = sorted(mansions, key=heights.__getitem__)
- visited = [1]*n
- for i in range(n):
- M = mansions[i]
- if heights[M] == 1 and len(pred[M]) > 0:
- visited[M] = 2
- elif heights[M] in rfib:
- visited[M] = max([visited[j] for j in pred[M]]+[0])+1
- has_any_fib = False
- for i in range(n):
- if heights[i] in rfib:
- has_any_fib = True
- break
- if not has_any_fib:
- print(0)
- else:
- print(max(visited))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement