QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#375626#4229. GCD Harmony8BQube#WA 1ms4308kbC++201.9kb2024-04-03 14:20:002024-04-03 14:20:01

Judging History

你现在查看的是最新测评结果

  • [2024-04-03 14:20:01]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4308kb
  • [2024-04-03 14:20:00]
  • 提交

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";
}

Details

Tip: Click on the bar to expand more detailed information

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'