QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#106220 | #4229. GCD Harmony | marsxiang5902 | TL | 23ms | 5836kb | C++17 | 1.4kb | 2023-05-16 23:58:37 | 2023-05-17 00:05:15 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int MP = 100, MN = 5005, MA = 2*MN, INF = 0x3f3f3f3f;
inline bool ckmin(int &x, int v) { return x > v ? x = v, 1 : 0; }
int N, lf[MP]{1,1}, ar[MN], dp[MN][MP]; vector<int> primes, adjl[MN];
void dfs(int u) {
for (int v: adjl[u]) {
adjl[v].erase(find(adjl[v].begin(), adjl[v].end(), u));
dfs(v);
}
for (int c = 2; c < MA; c++) {
int cans = c == ar[u] ? 0 : c;
for (int v: adjl[u]) {
int s = INF;
for (int p: primes)
if (c%p == 0)
ckmin(s, dp[v][p]);
cans += s;
if (cans >= INF) break;
}
for (int p: primes)
if (c%p == 0)
ckmin(dp[u][p], cans);
}
//printf("%d: ", u);
//for (int i = 0; i < 5; i++)
// printf("(%d %d) ", primes[i], dp[u][primes[i]]);
//printf("\n");
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
for (int i = 2; i < MP; i++) {
if (!lf[i]) {
primes.push_back(i);
lf[i] = i;
}
for (int p: primes) {
if (p * i >= MP || p > lf[i]) break;
lf[p * i] = p;
}
}
cin >> N;
for (int i = 1; i <= N; i++)
cin >> ar[i];
for (int i = 1, u, v; i < N; i++) {
cin >> u >> v;
adjl[u].push_back(v);
adjl[v].push_back(u);
}
memset(dp, 0x3f, sizeof dp);
dfs(1);
printf("%d\n", *min_element(dp[1], dp[2]));
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 6ms
memory: 5524kb
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: 7ms
memory: 5668kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 23ms
memory: 5608kb
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: 17ms
memory: 5836kb
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: 12ms
memory: 5672kb
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...