QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#99576 | #4229. GCD Harmony | Anwar_Gehad_Maghraby# | TL | 44ms | 199636kb | C++20 | 2.0kb | 2023-04-23 04:56:30 | 2023-04-23 04:56:33 |
Judging History
answer
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e3 + 2;
const int MOD = 1e9 + 7 ;
int a[N] ;
vector<int> ad[N];
int dp[N][N*2] , n;
vector<int> pr[2*N + 4] ;
int sol( int i , int x , int p = 0)
{
int & ret= dp[i][x] ;
if(~ret)return ret ;
bool s = 1 ;
for(int pri : pr[x]) s &= (bool)( count( pr[a[i]].begin() , pr[a[i]].end() , pri) ) ;
if(s) x= a[i] , ret =0 ;
else ret = x ;
int sz = (int) pr[x].size() ;
for(int ch : ad[i])
{
if(ch == p) continue;
int mn = 2*n;
for(int msk = 1 ; msk < 1 << sz; msk++)
{
int y = 1 ;
for(int j = 0 ;j < sz ; j++) {
if( msk & (1 << j) ) y *= pr[x][j] ;
}
mn = min(mn , sol(ch , y , i) ) ;
}
ret += mn ;
}
ret = min(ret , 2*n) ;
return ret ;
}
int main()
{
cin.tie(0);cin.sync_with_stdio(0);
cout.tie(0);cout.sync_with_stdio(0);
for(int i =2 ; i <= N+N ; i++)
{
if(pr[i].empty() )
{
for(int j = i ; j <= N+N ; j += i) pr[j].push_back(i);
}
}
cin >> n ;
for(int i =1 ; i <= n ;i++) cin >> a[i] ;
for (int i = 0; i < n - 1; ++i) {
int u , v;
cin >> u >> v;
ad[u].push_back(v);
ad[v].push_back(u);
}
memset(dp , -1 , sizeof dp) ;
int ans = 2*n ;
for(int v = 2 ; v <= N+N ; v++) ans = min(ans , sol(1 , v) ) ;
cout << ans ;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 36ms
memory: 199532kb
input:
6 5 6 3 4 9 12 1 2 1 3 1 4 1 6 3 5
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 28ms
memory: 199532kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 34ms
memory: 199528kb
input:
13 2 5 5 5 5 5 5 3 3 3 3 3 3 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13
output:
15
result:
ok single line: '15'
Test #4:
score: 0
Accepted
time: 44ms
memory: 199444kb
input:
9 2 5 5 5 5 3 3 3 3 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9
output:
14
result:
ok single line: '14'
Test #5:
score: 0
Accepted
time: 35ms
memory: 199636kb
input:
8 13 13 13 2 13 13 13 13 1 2 1 3 1 4 1 5 1 6 1 7 1 8
output:
13
result:
ok single line: '13'
Test #6:
score: -100
Time Limit Exceeded
input:
5000 59 25 51 26 33 99 2 13 29 58 5 47 96 83 63 22 69 89 41 90 20 97 85 90 55 17 54 75 54 24 90 54 74 78 81 77 2 47 68 18 60 81 99 86 7 6 76 43 17 43 92 25 36 26 47 100 63 66 2 16 47 25 48 86 24 2 10 42 44 80 92 48 49 21 49 40 32 85 53 88 15 30 4 27 77 16 6 80 50 56 46 14 3 48 92 50 93 35 69 29 48 4...