口下手エンジニアの悪あがき

自動車エンジニアのつぶやき

(Atcoder)Educatoinal DP Contest G-Longest PathをPythonで

メモ化再帰DPの動きについての備忘録です。勉強勉強・・・
こんな短いコードにいろいろ詰まってるなぁ・・・

ポイント

トポロジカルソートってやつでできるみたいだけど、メモ化再帰DPの方が楽らしい

DP遷移イメージ

f:id:ganbaru_engineer:20200921205610p:plain

コード
import sys
sys.setrecursionlimit(10**5+10)
def memo(v):
    if dp[v]!=-1:return dp[v]
    ans = 0
    for next_v in graph[v]:
        ans = max(ans,memo(next_v)+1)
    dp[v] = ans
    return ans

n,m = map(int,input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    x,y = map(int,input().split())
    graph[x].append(y)
    
dp = [-1]*(n+1)

ans = 0
for v in range(1,n+1):
    ans = max(ans, memo(v))
    
print(ans)