QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#260139#4229. GCD HarmonyMeetBrahmbhattWA 2ms4488kbC++172.0kb2023-11-21 20:59:552023-11-21 20:59:55

Judging History

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

  • [2023-11-21 20:59:55]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:4488kb
  • [2023-11-21 20:59:55]
  • 提交

answer

/**
 *  - Meet Brahmbhatt
 *  - Hard work always pays off
**/
#include"bits/stdc++.h"
using namespace std;

#ifdef MeetBrahmbhatt
#include "debug.h"
#else
#define dbg(...) 72
#endif

#define endl "\n"
// #define int long long

const long long INF = 4e18;

const int N = 1e4 + 10;
vector<int> pf[N];
vector<int> isp(N, 1);
vector<int> val(N, 1);

void pre() {
    isp[0] = isp[1] = 0;
    for (int i = 2; i < 100; i++) {
        if (isp[i]) {
            for (int j = i; j < N; j += i) {
                val[j] *= i;
                pf[j].push_back(i);
                if (j != i) {
                    isp[j] = 0;
                }
            }
        }
    }
}

void solve() {
    int n;
    cin >> n;
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    vector<vector<int>> G(n);
    for (int i = 0; i < n - 1; i++) {
        int a, b;
        cin >> a >> b;
        a--; b--;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    vector<vector<int>> dp(n, vector<int>(100, INF));
    function<void(int, int)> dfs = [&] (int u, int par) {
        vector<int> cost(N);
        for (int to : G[u]) {
            if (to != par) {
                dfs(to, u);
                for (int i = 2; i < N; i++) {
                    int take = INF;
                    for (int x : pf[i]) {
                        take = min(take, dp[to][x]);
                    }
                    cost[i] += take;
                }
            }
        }
        for (int i = 2; i < N; i++) {
            int t = cost[i] + val[i] * (val[i] != val[v[u]]);
            for (int x : pf[i]) {
                dp[u][x] = min(dp[u][x], t);
            }
        }
    };
    dfs(0, -1);
    int ans = *min_element(dp[0].begin(), dp[0].end());
    assert(ans <= 2 * n);
    cout << ans << endl;
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cout << fixed << setprecision(9);
    pre();
    int tt = 1;
    // cin >> tt;
    while (tt--) solve();
    return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 4488kb

input:

6
5
6
3
4
9
12
1 2
1 3
1 4
1 6
3 5

output:

-1651507200

result:

wrong answer 1st lines differ - expected: '6', found: '-1651507200'