結果
| 問題 | No.845 最長の切符 | 
| コンテスト | |
| ユーザー |  mkawa2 | 
| 提出日時 | 2019-07-11 21:52:09 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 2,089 ms / 3,000 ms | 
| コード長 | 743 bytes | 
| コンパイル時間 | 193 ms | 
| コンパイル使用メモリ | 82,176 KB | 
| 実行使用メモリ | 84,992 KB | 
| 最終ジャッジ日時 | 2024-11-08 11:01:54 | 
| 合計ジャッジ時間 | 9,453 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 27 | 
ソースコード
from collections import defaultdict
import sys
sys.setrecursionlimit(10 ** 6)
def dfs(i, s=0, d=0):
    s += 2 ** i
#    print(i,format(s,"b"),d,memo)
    if memo[i][s] > -1:
        return memo[i][s]+d
    memo[i][s]=-d
    mx = d
    for ki in to[i]:
        if (s >> ki) & 1: continue
        tmp = dfs(ki, s, d + ds[i][ki])
        if tmp > mx:
            mx = tmp
    memo[i][s] += mx
    return mx
n, m = map(int, input().split())
to = defaultdict(list)
ds = [[-1] * n for _ in range(n)]
memo = [[-1] * (2 ** n) for _ in range(n)]
for _ in range(m):
    a, b, c = map(int, input().split())
    a -= 1
    b -= 1
    to[a].append(b)
    to[b].append(a)
    ds[a][b] = ds[b][a] = max(ds[a][b], c)
print(max(dfs(i) for i in range(n)))
            
            
            
        