Atcoder come back quicklyをサンプルだけとけるやつ

atcoder.jp

classでDFSを使って見たのですがReになってしまいました。(サンプルはいけた)

結構更新の考え方に慣れてきてよかったなあと思ったのですが肝心のところでTLEやREが取れない。。なお回答はダイクストラ法だったので頑張って習得します。(今週中)

Reの部分は再帰関数のリミットによるもので書き換え可能だそうです。

N,M = map(int,input().split())
cost = [[float('inf')] * N for _ in range(N)]
edge = [[] for _ in range(N)]
for _ in range(M):
a,b,c = map(int,input().split())
if cost[a-1][b-1] > c:
cost[a-1][b-1] = c
if b-1 not in edge[a-1]:
edge[a-1].append(b-1)
class DFS:
def __init__(self,st):
self.ans = float('inf')
self.seen = [0 for _ in range(N)]
self.st = st
self.res = []
self.circle = False
def dfs(self,now,dis):
self.seen[now] += 1
if edge[now] == []:
return
if self.seen[now] > 1:
return
for next in edge[now]:
if next == self.st:
if self.ans > dis + cost[now][next]:
self.ans = dis + cost[now][next]
self.res.append(self.ans)
self.circle = True
else:
self.dfs(next,dis + cost[now][next])
self.seen[next] -=1
if self.circle:
return min(self.res)
else:
return -1

for i in range(N):
X = DFS(i)
print(X.dfs(i,0))