QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#36088#4229. GCD Harmonydeneribeiro10TL 25ms34824kbC++1.1kb2022-06-24 07:58:382022-06-24 07:58:39

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-06-24 07:58:39]
  • 评测
  • 测评结果:TL
  • 用时:25ms
  • 内存:34824kb
  • [2022-06-24 07:58:38]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define ll long long
// #define endl '\n'
const int INF = 1e9;
const ll INFLL = 1e18;
const int MAX = 1e6+10;
const int MOD = 1000000007;

int gcd(int a, int b) {
    return b ? gcd(b, a%b) : a;
}

int n;
vector<int> adj[MAX];
int v[MAX];
int dp[5050][300];

int DP(int node, int par, int val) {
    int &ans = dp[node][val];
    if(ans != -1) return ans;
    ans = INF;
    for(int i=2; i<=250; ++i) {
        if(gcd(i, val) != 1 or par == 0) {
            int sum = (i != v[node] ? i : 0);
            for(int to : adj[node]) if(to != par) {
                sum += DP(to, node, i);
            }
            ans = min(ans, sum);
        }
    }

    return ans;
}

void test_case() {
    cin >> n;
    for(int i=1; i<=n; ++i) cin >> v[i];
    for(int i=0; i<n-1; ++i) {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u); 
    }

    memset(dp, -1, sizeof dp);
    cout << DP(1, 0, 0) << endl;
}

int main() {
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);

    test_case();

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 24ms
memory: 33804kb

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: 10ms
memory: 34620kb

input:

3
1
2
3
3 1
2 3

output:

4

result:

ok single line: '4'

Test #3:

score: 0
Accepted
time: 25ms
memory: 34824kb

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: 14ms
memory: 33428kb

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: 17ms
memory: 33560kb

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...

output:


result: