結果
| 問題 |
No.1917 LCMST
|
| コンテスト | |
| ユーザー |
とりゐ
|
| 提出日時 | 2022-02-28 14:05:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 2,992 ms / 4,000 ms |
| コード長 | 868 bytes |
| コンパイル時間 | 416 ms |
| コンパイル使用メモリ | 81,792 KB |
| 実行使用メモリ | 273,136 KB |
| 最終ジャッジ日時 | 2024-06-28 08:02:14 |
| 合計ジャッジ時間 | 61,115 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 42 |
ソースコード
from heapq import heappush, heappop, heapify
def MST(n,edge):
used=[0]*n
todo=edge[0].copy()
used[0]=1
heapify(todo)
ans=0
while todo:
cost,v=heappop(todo)
if used[v]:
continue
used[v] = 1
ans+=cost
for c,w in edge[v]:
if used[w]:
continue
heappush(todo,(c,w))
return ans
n=int(input())
a=list(map(int,input().split()))
m=10**5
d=[-1]*(m+1)
cnt=[0]*(m+1)
ans=0
for i in a:
if cnt[i]==0:
cnt[i]=1
else:
ans+=i
id=[-1]*(m+1)
size=0
for i in range(m+1):
if cnt[i]:
id[i]=size
size+=1
edge=[[] for i in range(size)]
for i in range(1,m+1):
for j in range(i,m+1,i):
if cnt[j]==1:
if d[i]==-1:
d[i]=j
else:
id1=id[j]
id2=id[d[i]]
edge[id1].append((d[i]*j//i,id2))
edge[id2].append((d[i]*j//i,id1))
ans+=MST(size,edge)
print(ans)
とりゐ