結果
| 問題 | No.1690 Power Grid | 
| コンテスト | |
| ユーザー | 👑  Kazun | 
| 提出日時 | 2021-09-24 22:49:07 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 753 ms / 3,000 ms | 
| コード長 | 829 bytes | 
| コンパイル時間 | 156 ms | 
| コンパイル使用メモリ | 81,660 KB | 
| 実行使用メモリ | 86,788 KB | 
| 最終ジャッジ日時 | 2024-07-05 11:05:55 | 
| 合計ジャッジ時間 | 11,552 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 25 | 
ソースコード
N,M,K=map(int,input().split())
A=list(map(int,input().split()))
inf=float("inf")
T=[[inf]*N for _ in range(N)]
for _ in range(M):
    x,y,z=map(int,input().split())
    x-=1; y-=1
    T[x][y]=T[y][x]=z
# WF
for i in range(N):
    T[i][i]=0
for k in range(N):
    for i in range(N):
        for j in range(N):
            T[i][j]=min(T[i][j], T[i][k]+T[k][j])
DP=[inf]*(1<<N); DP[0]=0
for i in range(N):
    DP[1<<i]=A[i]
for S in range(1,1<<N):
    U=[]
    V=[]
    for x in range(N):
        if (S>>x)&1:
            U.append(x)
        else:
            V.append(x)
    for v in V:
        L=inf
        for u in U:
            L=min(L,T[u][v])
        DP[S|(1<<v)]=min(DP[S|1<<v], DP[S]+A[v]+L)
popcount=lambda x:bin(x).count("1")
X=inf
for S in range(1<<N):
    if popcount(S)==K:
        X=min(X,DP[S])
print(X)
            
            
            
        