QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#413089 | #4229. GCD Harmony | ishmeal# | WA | 1370ms | 5248kb | C++20 | 1.5kb | 2024-05-17 04:27:32 | 2024-05-17 04:27:32 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
vector<int> primes;
const int P = 25;
int main() {
cin.tie(0)->sync_with_stdio(0);
for (int i = 2; i <= 100; i++) {
bool prime = 1;
for (int j = 2; prime and j*j <= i; j++)
prime &= i%j != 0;
if (prime) primes.emplace_back(i);
}
int n; cin >> n;
vector<int> a(n); for (int &v : a) cin >> v;
vector adj(n, vector<int>());
for (int i = 1; i < n; i++) {
int a, b; cin >> a >> b; a--, b--;
adj[a].emplace_back(b);
adj[b].emplace_back(a);
}
vector dp(n, vector<int>(primes.size(), INT_MAX));
auto dfs = [&](auto self, int u, int p) {
if (adj[u].size() == 1 and adj[u][0] == p) {
for (unsigned i = 0; i < primes.size(); i++) {
if (gcd(primes[i],a[u]) > 1) dp[u][i] = 0;
else dp[u][i] = primes[i];
}
return;
}
map<int,int> cur {{1, 0}, {a[u], 0}};
for (int v : adj[u]) if (v != p) {
self(self, v, u);
map<int,int> cur2;
auto add = [&](int b, int c) {
if (cur2.count(b)) cur2[b] = min(cur2[b],c);
else cur2[b] = c;
};
for (auto [i, c] : cur) {
for (unsigned j = 0; j < primes.size(); j++) {
if (i % primes[j]) {
if (i * primes[j] <= 10000)
add(i*primes[j], c + dp[v][j]);
} else add(i, c + dp[v][j]);
}
}
swap(cur,cur2);
}
for (auto [i, c] : cur)
for (unsigned j = 0; j < primes.size(); j++)
if (i % primes[j] == 0)
dp[u][j] = min(dp[u][j], c + i * (i != a[u]));
};
dfs(dfs, 0, 0);
cout << *min_element(dp[0].begin(), dp[0].end()) << '\n';
}
详细
Test #1:
score: 100
Accepted
time: 3ms
memory: 3564kb
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: 0ms
memory: 3524kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 12ms
memory: 3632kb
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: 8ms
memory: 3600kb
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: 6ms
memory: 3580kb
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: 0
Accepted
time: 1302ms
memory: 5176kb
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...
output:
4778
result:
ok single line: '4778'
Test #7:
score: 0
Accepted
time: 1319ms
memory: 4756kb
input:
5000 15 8 34 68 69 24 72 65 85 5 11 7 24 50 94 98 99 88 99 31 58 93 94 14 92 17 45 61 85 83 66 97 35 52 33 41 98 10 77 59 33 23 21 49 83 93 23 77 60 49 27 2 73 10 31 23 8 73 3 94 19 74 78 82 86 95 14 18 58 15 5 58 99 60 82 34 82 6 96 31 70 6 8 49 82 51 95 52 95 55 94 21 74 83 19 7 99 74 49 65 25 6 5...
output:
4733
result:
ok single line: '4733'
Test #8:
score: -100
Wrong Answer
time: 1370ms
memory: 5248kb
input:
5000 15 15 14 18 19 15 13 18 16 17 16 18 16 16 17 16 19 17 16 19 15 13 17 15 15 14 15 16 16 14 18 15 19 16 18 15 14 13 15 15 13 19 18 15 17 14 15 14 17 16 13 13 19 16 18 19 14 19 17 13 19 14 15 14 15 13 13 17 18 15 17 17 16 16 18 19 19 16 13 16 18 15 15 17 16 15 14 16 13 18 13 18 19 18 15 13 13 14 1...
output:
5612
result:
wrong answer 1st lines differ - expected: '5609', found: '5612'