QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#100164 | #4229. GCD Harmony | RoomGamadan# | WA | 1141ms | 200012kb | C++23 | 2.4kb | 2023-04-24 20:41:54 | 2023-04-24 20:41:56 |
Judging History
answer
#pragma GCC optimize("Ofast")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define el '\n'
#define F first
#define S second
typedef long long ll;
typedef long double ld;
bool multipleTestCases = 0, sublime = 1;
const int N = 1e4 + 5, INF = 1e9 + 5, mod = 1e9 + 7, LOG = 22, SQ = 500;
int n, a[N], dp[N >> 1][N];
vector<int> g[N], primes[N], initPrimes;
void pre() {
for (int i = 2; i < N; i++) {
if (!primes[i].size()) {
if (i < 100) {
initPrimes.push_back(i);
}
for (int j = i; j < N; j += i) {
primes[j].push_back(i);
}
}
}
}
int solve(int node, int par, int val) {
int &ret = dp[node][val];
if (~ret) {
return ret;
}
ret = 0;
// shof 3yalak
for (auto &ch : g[node]) {
if (ch == par) {
continue;
}
int cur = INF;
for (auto &p : primes[val]) {
if (a[ch] % p == 0) {
cur = min(cur, solve(ch, node, a[ch]));
}
else {
cur = min(cur, solve(ch, node, p) + p);
}
}
ret += cur;
}
// tawar mn zatak
for (auto &p : initPrimes) {
if (val % p == 0 or val * p >= N) {
continue;
}
ret = min(ret, solve(node, par, val * p) + (a[node] == val ? val * p : val * p - val));
}
return ret;
}
void doWork() {
cin >> n;
pre();
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(dp, -1, sizeof dp);
int ans = 2 * n;
for (auto &i : initPrimes) {
if (a[1] % i == 0) {
ans = min(ans, solve(1, 1, a[1]));
}
else {
ans = min(ans, solve(1, 1, i) + i);
}
}
cout << ans << el;
}
signed main() {
#ifdef ONLINE_JUDGE
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#endif
#ifndef ONLINE_JUDGE
if (sublime) {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
}
#endif
int tests = 1;
if (multipleTestCases) {
cin >> tests;
}
for (int tc = 1; tc <= tests; tc++) {
doWork();
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 51ms
memory: 199632kb
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: 38ms
memory: 199720kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 12ms
memory: 199668kb
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: 16ms
memory: 199632kb
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: 24ms
memory: 199628kb
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
Wrong Answer
time: 1141ms
memory: 200012kb
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:
4779
result:
wrong answer 1st lines differ - expected: '4778', found: '4779'