結果
| 問題 |
No.1690 Power Grid
|
| コンテスト | |
| ユーザー |
👑 Kazun
|
| 提出日時 | 2021-09-25 01:33:22 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 598 ms / 3,000 ms |
| コード長 | 936 bytes |
| コンパイル時間 | 316 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 88,696 KB |
| 最終ジャッジ日時 | 2024-07-05 11:53:11 |
| 合計ジャッジ時間 | 9,312 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / 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):
Tk=T[k]
for i in range(N):
Ti=T[i]
for j in range(N):
Ti[j]=min(Ti[j], Ti[k]+Tk[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=[]
SS=S
for x in range(N):
if SS&1:
U.append(x)
else:
V.append(x)
SS>>=1
for v in V:
L=inf
Tv=T[v]
for u in U:
L=min(L,Tv[u])
DP[S|(1<<v)]=min(DP[S|1<<v], DP[S]+A[v]+L)
popcount=[0]*(1<<N)
for S in range(1,1<<N):
x=S&(-S)
popcount[S]=popcount[S^x]+1
X=inf
for S in range(1<<N):
if popcount[S]==K:
X=min(X,DP[S])
print(X)
Kazun