QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#375626 | #4229. GCD Harmony | 8BQube# | WA | 1ms | 4308kb | C++20 | 1.9kb | 2024-04-03 14:20:00 | 2024-04-03 14:20:01 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define X first
#define Y second
#define ALL(v) v.begin(), v.end()
#define pb push_back
#define SZ(a) ((int)a.size())
const int C = 100;
int arr[5005], sz[5005], prime[10005];
int dp[5005][10005], tmp[10005], n;
//bitset<10005> table[10005];
vector<int> G[5005];
void dfs(int u, int f) {
sz[u] = 1;
for (int i : G[u])
if (i != f) {
dfs(i, u);
sz[u] += sz[i];
}
int up = 10000;
iota(dp[u] + 2, dp[u] + up + 1, 2);
dp[u][arr[u]] = 0;
for (int i : G[u])
if (i != f) {
fill_n(tmp + 1, up, 2 * n + 1);
for (int j = 2; j <= up; ++j) {
if (prime[j]) continue;
int val = 2 * n + 1;
for (int k = j; k <= up; k += j)
val = min(val, dp[i][k]);
for (int k = j; k <= up; k += j)
tmp[k] = min(tmp[k], val);
}
for (int j = 2; j <= up; ++j)
dp[u][j] += tmp[j], dp[u][j] = min(dp[u][j], 2 * n + 1);
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> arr[i];
for (int i = 2; i <= 10000; ++i)
if (!prime[i])
for (int j = i + i; j <= 10000; ++j)
prime[j] = 1;
/*for (int i = 2; i <= 10000; ++i)
for (int j = i; j <= 10000; ++j) {
int a = i, b = j;
if (b % a == 0) table[i][j] = table[j][i] = 1;
else table[i][j] = table[j][i] = table[b % a][a];
}*/
for (int i = 1; i < n; ++i) {
int u, v;
cin >> u >> v;
G[u].pb(v);
G[v].pb(u);
}
dfs(1, 1);
cout << *min_element(dp[1] + 2, dp[1] + 10000 + 1) << "\n";
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3892kb
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: 1ms
memory: 3880kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 4308kb
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:
18
result:
wrong answer 1st lines differ - expected: '15', found: '18'