結果
問題 | No.2497 GCD of LCMs |
ユーザー | kotatsugame |
提出日時 | 2023-10-06 22:32:24 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 21 ms / 2,000 ms |
コード長 | 1,338 bytes |
コンパイル時間 | 1,149 ms |
コンパイル使用メモリ | 86,976 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-26 16:39:08 |
合計ジャッジ時間 | 1,967 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 2 ms
6,944 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 2 ms
6,944 KB |
testcase_07 | AC | 6 ms
6,940 KB |
testcase_08 | AC | 8 ms
6,940 KB |
testcase_09 | AC | 10 ms
6,940 KB |
testcase_10 | AC | 17 ms
6,940 KB |
testcase_11 | AC | 8 ms
6,940 KB |
testcase_12 | AC | 16 ms
6,944 KB |
testcase_13 | AC | 20 ms
6,944 KB |
testcase_14 | AC | 12 ms
6,940 KB |
testcase_15 | AC | 10 ms
6,944 KB |
testcase_16 | AC | 21 ms
6,944 KB |
ソースコード
#include<iostream> #include<vector> #include<queue> #include<algorithm> #include<cassert> #include<atcoder/modint> using namespace std; using mint=atcoder::modint998244353; int N,M; int A[250]; int W[250]; int dist[250]; vector<int>P; vector<int>G[250]; mint ans[250]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>N>>M; for(int i=0;i<N;i++) { ans[i]=1; cin>>A[i]; int a=A[i]; for(int p=2;p*p<=a;p++)if(a%p==0) { while(a%p==0)a/=p; P.push_back(p); } if(a>1)P.push_back(a); } sort(P.begin(),P.end()); P.erase(unique(P.begin(),P.end()),P.end()); for(int i=0;i<M;i++) { int u,v;cin>>u>>v; u--,v--; G[u].push_back(v); G[v].push_back(u); } for(int p:P) { for(int i=0;i<N;i++) { W[i]=0; while(A[i]%p==0)A[i]/=p,W[i]++; dist[i]=1e9; } dist[0]=W[0]; priority_queue<pair<int,int> >Q; Q.push(make_pair(-dist[0],0)); while(!Q.empty()) { int u=Q.top().second; int d=-Q.top().first; Q.pop(); if(dist[u]<d)continue; for(int v:G[u]) { int nd=max(d,W[v]); if(dist[v]>nd) { dist[v]=nd; Q.push(make_pair(-dist[v],v)); } } } //cout<<"p = "<<p<<endl; for(int i=0;i<N;i++) { ans[i]*=mint::raw(p).pow(dist[i]); //cout<<i<<"="<<dist[i]<<", "; } //cout<<endl; } for(int i=0;i<N;i++)cout<<ans[i].val()<<"\n"; }