結果
問題 | No.1917 LCMST |
ユーザー |
![]() |
提出日時 | 2022-04-29 22:03:45 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 354 ms / 4,000 ms |
コード長 | 1,213 bytes |
コンパイル時間 | 4,623 ms |
コンパイル使用メモリ | 260,864 KB |
最終ジャッジ日時 | 2025-01-28 22:53:38 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:17:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 17 | scanf("%d",&A); | ~~~~~^~~~~~~~~
ソースコード
#include <stdio.h>#include <atcoder/all>#include <bits/stdc++.h>using namespace std;using namespace atcoder;using mint = modint1000000007;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 1000000000int main(){int N;cin>>N;vector<int> cnt(100001,0);rep(i,N){int A;scanf("%d",&A);cnt[A]++;}long long ans = 0;rep(i,cnt.size()){if(cnt[i]>1){long long t = cnt[i]-1;t *= i;ans += t;}}vector ds(100001,vector<int>());for(int i=1;i<=100000;i++){for(int j=i*2;j<=100000;j+=i){ds[j].push_back(i);}}vector<long long> mini(100001,Inf);for(int i=1;i<=100000;i++){for(int j=i;j<=100000;j+=i){if(cnt[j]>0){mini[i] = j;break;}}}dsu D(100001);vector<pair<long long,pair<int,int>>> E;rep(i,cnt.size()){if(cnt[i]>0){rep(j,ds[i].size()){int t = ds[i][j];if(mini[t]==Inf)continue;E.emplace_back(lcm(mini[t],i),make_pair(mini[t],i));}}}sort(E.begin(),E.end());//cout<<ans<<endl;rep(i,E.size()){long long Dc = E[i].first;int u = E[i].second.first;int v = E[i].second.second;if(D.same(u,v))continue;D.merge(u,v);ans += Dc;}cout<<ans<<endl;return 0;}