QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#106220#4229. GCD Harmonymarsxiang5902TL 23ms5836kbC++171.4kb2023-05-16 23:58:372023-05-17 00:05:15

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-17 00:05:15]
  • 评测
  • 测评结果:TL
  • 用时:23ms
  • 内存:5836kb
  • [2023-05-16 23:58:37]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

const int MP = 100, MN = 5005, MA = 2*MN, INF = 0x3f3f3f3f;
inline bool ckmin(int &x, int v) { return x > v ? x = v, 1 : 0; }

int N, lf[MP]{1,1}, ar[MN], dp[MN][MP]; vector<int> primes, adjl[MN];

void dfs(int u) {
  for (int v: adjl[u]) {
    adjl[v].erase(find(adjl[v].begin(), adjl[v].end(), u));
    dfs(v);
  }
  for (int c = 2; c < MA; c++) {
    int cans = c == ar[u] ? 0 : c;
    for (int v: adjl[u]) {
      int s = INF;
      for (int p: primes)
        if (c%p == 0)
          ckmin(s, dp[v][p]);
      cans += s;
      if (cans >= INF) break;
    }
    for (int p: primes)
      if (c%p == 0)
        ckmin(dp[u][p], cans);
  }
  //printf("%d: ", u);
  //for (int i = 0; i < 5; i++)
  //  printf("(%d %d) ", primes[i], dp[u][primes[i]]);
  //printf("\n");
}

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

  for (int i = 2; i < MP; i++) {
    if (!lf[i]) {
      primes.push_back(i);
      lf[i] = i;
    }
    for (int p: primes) {
      if (p * i >= MP || p > lf[i]) break;
      lf[p * i] = p;
    }
  }
  cin >> N;
  for (int i = 1; i <= N; i++)
    cin >> ar[i];  
  for (int i = 1, u, v; i < N; i++) {
    cin >> u >> v;
    adjl[u].push_back(v);
    adjl[v].push_back(u);
  }
  memset(dp, 0x3f, sizeof dp);
  dfs(1);
  printf("%d\n", *min_element(dp[1], dp[2]));

  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 6ms
memory: 5524kb

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

input:

3
1
2
3
3 1
2 3

output:

4

result:

ok single line: '4'

Test #3:

score: 0
Accepted
time: 23ms
memory: 5608kb

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

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: 12ms
memory: 5672kb

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: