QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#64953 | #4229. GCD Harmony | Sa3tElSefr# | TL | 97ms | 39052kb | C++20 | 2.3kb | 2022-11-26 00:07:09 | 2022-11-26 00:07:11 |
Judging History
answer
#pragma GCC optimize("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
const int N = 5005 + 9, mod = 998244353;
const ll OO = 1e9;
bool isPrime(int n) {
for(int i = 2; i * i <= n; i++) {
if(n % i == 0) {
return 0;
}
}
return 1;
}
vector<int> v;
set<int> st;
void solve(int idx, int cur) {
if(cur > 10000) return;
if(idx == (int) v.size()) {
if(cur > 1) {
st.insert(cur);
}
return;
}
solve(idx + 1, cur);
solve(idx + 1, cur * v[idx]);
}
vector<int> adj[N], adjTree[N], all;
int dp[5005][1500], val[5005];
int solve(int node, int par, int last) {
auto &ret = dp[node][last];
if(ret != -1) return ret;
ret = 10000;
for(auto i: adj[last]) {
int t = 0;
if(all[i] != val[node]) t = all[i];
for(auto j: adjTree[node]) {
if(j != par) {
t += solve(j, node, i);
if(t > ret) break;
}
}
ret = min(ret, t);
}
return ret;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
for(int i = 2; i <= 100; i++) {
st.insert(i);
if(isPrime(i)) {
v.push_back(i);
}
}
// cout << (int) v.size() << '\n';
solve(0, 1);
for(auto i: st) all.push_back(i);
// cout << (int) all.size() << '\n';
int c = 0;
for(int i = 0; i < (int) all.size(); i++) {
adj[i].push_back(i);
for(int j = i + 1; j < (int) all.size(); j++) {
if(__gcd(all[i], all[j]) > 1) {
c += 2;
adj[i].push_back(j);
adj[j].push_back(i);
}
}
}
for(int i = 0; i < (int) all.size(); i++) {
adj[(int) all.size()].push_back(i);
}
int n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> val[i];
for(int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adjTree[u].push_back(v);
adjTree[v].push_back(u);
}
memset(dp, -1, sizeof dp);
cout << solve(1, 0, (int) all.size());
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 84ms
memory: 39052kb
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: 82ms
memory: 38912kb
input:
3 1 2 3 3 1 2 3
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 84ms
memory: 38916kb
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: 73ms
memory: 38872kb
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: 97ms
memory: 38844kb
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...