結果
| 問題 |
No.1917 LCMST
|
| コンテスト | |
| ユーザー |
Koi
|
| 提出日時 | 2025-07-16 00:05:40 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,761 bytes |
| コンパイル時間 | 3,665 ms |
| コンパイル使用メモリ | 307,664 KB |
| 実行使用メモリ | 87,688 KB |
| 最終ジャッジ日時 | 2025-07-16 00:06:15 |
| 合計ジャッジ時間 | 28,171 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 21 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#include<atcoder/dsu>
using namespace atcoder;
const int M = 100000;
int main(){
// cerr << "HI\n";
vector<vector<int>> L(M + 1);
for(int i = 1; i < M + 1; i++){
int x = i;
while(x < M){
L[x].push_back(i);
x += i;
}
}
// cerr << "HI\n";
int N;
cin >> N;
vector<long long> A(N);
for(int i = 0; i < N; i++){
cin >> A[i];
}
long long ans = 0;
unordered_set<long long> S;
for(int i = 0; i < N; i++){
if(S.count(A[i]) == 1){
ans += A[i];
}else{
S.insert(A[i]);
}
}
A.clear();
for(long long x: S){
A.push_back(x);
}
N = (int)A.size();
vector<vector<pair<long long, int>>> D(M + 1);
vector<tuple<long long, int, int>> Es;
for(int i = 0; i < N; i++){
for(int p:L[A[i]]){
// cerr << i << "\n";
D[p].push_back({A[i], i});
}
}
for(int i = 1; i < M + 1; i++){
vector<pair<long long, int>> &L = D[i];
if(L.size() > 1){
long long best = 1000000;
int best_ind = -1;
for(int j = 0; j < L.size(); j++){
if(best > L[j].first){
best = L[j].first;
best_ind = j;
}
}
for(int j = 0; j < L.size(); j++){
if(j != best_ind){
long long cost = L[best_ind].first * L[j].first / i;
//cerr << L[best_ind].second << " " << L[j].second << " " << cost << "\n";
Es.push_back({cost, L[best_ind].second, L[j].second});
}
}
}
}
sort(Es.begin(), Es.end());
dsu d(N);
for(auto cost_i_j : Es){
long long cost = get<0>(cost_i_j);
int i = get<1>(cost_i_j);
int j = get<2>(cost_i_j);
if(!d.same(i, j)){
d.merge(i, j);
ans += cost;
}
}
cout << ans << "\n";
}
Koi