QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#370921#791. MousetrapCamillus25 425ms67224kbC++201.8kb2024-03-29 19:31:152024-03-29 19:31:16

Judging History

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

  • [2024-03-29 19:31:16]
  • 评测
  • 测评结果:25
  • 用时:425ms
  • 内存:67224kb
  • [2024-03-29 19:31:15]
  • 提交

answer

/// @author Camillus <3
#include "bits/stdc++.h"
using namespace std;

static constexpr int max_n = 2'000'000;

vector<int> g[max_n];
int parent[max_n];

int root;

int dp[max_n];

void dfs(int u, int p, int sum) {
    parent[u] = p;

    auto it = find(g[u].begin(), g[u].end(), p);
    if (it != g[u].end()) g[u].erase(it);

    for (int v : g[u]) {
        dfs(v, u, sum + g[v].size() - 2);
    }

    if (g[u].empty()) {
        dp[u] = sum;
    } else {
        if (g[u].size() == 1) {
            dp[u] = sum;
        } else {
            sort(g[u].begin(), g[u].end(), [&](int u, int v) -> bool {
                return dp[u] > dp[v];
            });
            dp[u] = dp[g[u][1]] + 1;
        }
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> root >> m;

    for (int i = 0; i < n - 1; i++) {
        int u, v;
        cin >> u >> v;

        g[u].push_back(v);
        g[v].push_back(u);
    }

    dfs(root, -1, 1);

    int l = -1, r = 2 * n;

    while (r - l > 1) {
        int x = (l + r) / 2;
        int bank = 1;
        int used = 0;

        int u = m;

        int last = -1;

        while (u != root) {

            for (int v : g[u]) {
                if (v == last) {
                    continue;
                }

                if (dp[v] + used > x) {
                    bank -= 1;
                    used += 1;
                }
            }

            if (bank < 0) {
                break;
            }

            last = u;
            u = parent[u];
            bank += 1;
        }

        if (bank < 0 || used > x) {
            l = x;
        } else {
            r = x;
        }
    }

    cout << r << '\n';
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 20
Accepted
time: 3ms
memory: 3568kb

input:

10 2 10
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5

output:

2

result:

ok single line: '2'

Test #2:

score: 0
Accepted
time: 2ms
memory: 3628kb

input:

10 1 10
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5

output:

3

result:

ok single line: '3'

Test #3:

score: 0
Accepted
time: 2ms
memory: 3564kb

input:

10 1 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

output:

0

result:

ok single line: '0'

Test #4:

score: 0
Accepted
time: 2ms
memory: 3632kb

input:

9 1 7
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

output:

1

result:

ok single line: '1'

Test #5:

score: 0
Accepted
time: 2ms
memory: 3692kb

input:

10 1 10
1 2
3 2
4 3
5 3
6 4
7 3
8 7
9 2
10 5

output:

3

result:

ok single line: '3'

Test #6:

score: 0
Accepted
time: 0ms
memory: 3708kb

input:

8 1 8
1 2
3 2
4 3
5 4
6 2
7 6
8 3

output:

2

result:

ok single line: '2'

Test #7:

score: -20
Wrong Answer
time: 0ms
memory: 3628kb

input:

10 3 2
3 1
1 2
2 4
2 5
2 6
7 5
8 5
9 6
10 6

output:

4

result:

wrong answer 1st lines differ - expected: '5', found: '4'

Subtask #2:

score: 25
Accepted

Test #11:

score: 25
Accepted
time: 150ms
memory: 66116kb

input:

1000000 1 2
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 6
12 6
13 7
14 7
15 8
16 8
17 9
18 9
19 10
20 10
21 11
22 11
23 12
24 12
25 13
26 13
27 14
28 14
29 15
30 15
31 16
32 16
33 17
34 17
35 18
36 18
37 19
38 19
39 20
40 20
41 21
42 21
43 22
44 22
45 23
46 23
47 24
48 24
49 25
50 25
51 26
52 26
53 27
5...

output:

36

result:

ok single line: '36'

Test #12:

score: 0
Accepted
time: 146ms
memory: 59912kb

input:

900001 1 2
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 6
12 6
13 7
14 7
15 8
16 8
17 9
18 9
19 10
20 10
21 11
22 11
23 12
24 12
25 13
26 13
27 14
28 14
29 15
30 15
31 16
32 16
33 17
34 17
35 18
36 18
37 19
38 19
39 20
40 20
41 21
42 21
43 22
44 22
45 23
46 23
47 24
48 24
49 25
50 25
51 26
52 26
53 27
54...

output:

36

result:

ok single line: '36'

Test #13:

score: 0
Accepted
time: 418ms
memory: 67216kb

input:

1000000 1 2
1 2
3 2
4 2
5 4
6 5
7 3
8 5
9 5
10 2
11 5
12 4
13 5
14 9
15 9
16 10
17 2
18 8
19 7
20 11
21 4
22 5
23 13
24 20
25 23
26 8
27 2
28 5
29 26
30 4
31 16
32 11
33 7
34 18
35 21
36 3
37 19
38 20
39 6
40 37
41 29
42 10
43 28
44 32
45 36
46 22
47 6
48 14
49 20
50 13
51 45
52 37
53 11
54 45
55 49...

output:

60

result:

ok single line: '60'

Test #14:

score: 0
Accepted
time: 165ms
memory: 35480kb

input:

500000 1 2
1 2
3 2
4 3
5 4
6 2
7 6
8 7
9 5
10 3
11 6
12 6
13 7
14 11
15 12
16 5
17 12
18 12
19 11
20 16
21 11
22 3
23 18
24 18
25 17
26 3
27 10
28 22
29 16
30 3
31 27
32 23
33 20
34 29
35 31
36 28
37 12
38 17
39 2
40 22
41 15
42 17
43 9
44 9
45 12
46 14
47 26
48 20
49 7
50 8
51 42
52 46
53 49
54 18
...

output:

74

result:

ok single line: '74'

Test #15:

score: 0
Accepted
time: 425ms
memory: 67172kb

input:

1000000 1 2
1 2
3 2
4 2
5 3
6 2
7 5
8 7
9 2
10 2
11 2
12 5
13 8
14 11
15 2
16 2
17 2
18 11
19 16
20 17
21 14
22 4
23 22
24 21
25 21
26 2
27 14
28 22
29 9
30 14
31 18
32 26
33 25
34 18
35 34
36 16
37 24
38 29
39 35
40 18
41 34
42 12
43 18
44 30
45 14
46 19
47 7
48 37
49 48
50 30
51 41
52 13
53 51
54 ...

output:

69

result:

ok single line: '69'

Test #16:

score: 0
Accepted
time: 419ms
memory: 67224kb

input:

999999 1 2
1 2
3 2
4 3
5 4
6 5
7 6
8 4
9 8
10 5
11 10
12 2
13 12
14 12
15 4
16 3
17 15
18 14
19 6
20 16
21 2
22 17
23 22
24 2
25 19
26 24
27 10
28 6
29 25
30 11
31 2
32 11
33 17
34 14
35 32
36 28
37 7
38 9
39 7
40 18
41 29
42 16
43 38
44 34
45 42
46 22
47 32
48 34
49 21
50 30
51 43
52 26
53 7
54 22
...

output:

67

result:

ok single line: '67'

Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%