QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#863480#9678. 网友小 Z 的树cooluo16 28ms11884kbC++232.2kb2025-01-19 17:52:002025-01-19 17:52:12

Judging History

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

  • [2025-01-19 17:52:12]
  • 评测
  • 测评结果:16
  • 用时:28ms
  • 内存:11884kb
  • [2025-01-19 17:52:00]
  • 提交

answer

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

#define pii pair<int, int>
#define mkpr make_pair
#define vi vector<int>
#define all(c) (c).begin(), (c).end()
#define rep(i, l, r) for (int i(l), i##End(r); i <= i##End; i = -~i)
#define ti3 tuple<int, int, int>

int n, m;
map<ti3, int> mp;

int qry(int u, int v, int w) {
    vi _({u, v, w}); sort(all(_));
    u = _[0], v = _[1], w = _[2];
    ti3 x(u, v, w);
    if (mp.count(x)) return mp[x];
    return mp[x] = query(u, v, w);
}

pii find_diameter(int task_id, int n) {
    mp.clear();
    if (n <= 2) return mkpr(1, n);
    int u = 1, v = 2, w = 3;
    rep(i, 1, n) if (i != u && i != v && i != w) {
        // printf("@ %d: (%d %d %d) (%d %d %d) -> ", i, u, v, w, i, v, w);
        if (qry(u, v, w) < qry(i, v, w)) u = i;
        // printf("(%d %d %d)\n", u, v, w);
    }
    rep(i, 1, n) if (i != u && i != v && i != w) {
        // printf("# %d: (%d %d %d) (%d %d %d) -> ", i, u, v, w, i, v, w);
        if (qry(u, v, w) < qry(u, i, w)) v = i;
        // printf("(%d %d %d)\n", u, v, w);
    }
    rep(i, 1, n) if (i != u && i != v && i != w) {
        // printf("$ %d: (%d %d %d) (%d %d %d) -> ", i, u, v, w, i, v, w);
        if (qry(u, v, w) < qry(u, v, i)) w = i;
        // printf("(%d %d %d)\n", u, v, w);
    }
    int x = 0;
    rep(i, 1, n) if (i != u && i != v && i != w)
        if (!x || qry(u, v, i) < qry(u, v, x)) x = i;
    // cout << u << ' ' << v << ' ' << w << " | " << x << endl;
    // for (auto [_, x] : mp) {
    //     auto [_u, _v, _w] = _;
    //     printf("[%d %d %d]: %d\n", _u, _v, _w, x);
    // }
    if (!x) {
        if (in(u, v, w)) return mkpr(v, w);
        if (in(v, u, w)) return mkpr(u, w);
        return mkpr(u, v);
    }
    if (in(x, u, w)) {
        int a = qry(u, v, x) >> 1, b = qry(u, w, x) >> 1, c = qry(u, v, w) - a - b;
        int d = max({a, b, c});
        if (d == a) return mkpr(u, v);
        if (d == b) return mkpr(u, w);
        return mkpr(v, w);
    }
    int a = qry(u, v, x) >> 1, b = qry(v, w, x) >> 1, c = qry(u, v, w) - a - b;
    int d = max({a, b, c});
    if (d == a) return mkpr(u, v);
    if (d == b) return mkpr(v, w);
    return mkpr(u, w);
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 16
Accepted

Test #1:

score: 16
Accepted
time: 3ms
memory: 10304kb

input:

1 100
25
1 3
2 18
3 8
4 18
5 14
6 22
7 18
8 10
9 11
10 12
11 25
12 16
13 11
14 17
15 17
16 25
17 2
18 20
19 18
20 12
21 1
22 17
23 14
24 1
50
1 37
2 27
3 10
4 25
5 16
6 17
7 10
8 36
9 16
10 6
11 48
12 2
13 28
14 30
15 10
16 44
17 31
18 1
19 6
20 7
21 30
22 42
23 45
24 23
25 27
26 39
27 45
28 48
29 4...

output:

correct

result:

ok Correct

Subtask #2:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Test #2:

score: 0
Wrong Answer
time: 28ms
memory: 11884kb

input:

2 2006
42
1 32
2 4
3 6
4 29
5 1
6 42
7 10
8 16
9 6
10 25
11 42
12 8
13 36
14 8
15 17
16 3
17 6
18 21
19 23
20 31
21 42
22 6
23 32
24 7
25 27
26 34
27 31
28 6
29 41
30 20
31 9
32 7
33 3
34 5
35 5
36 1
37 8
38 14
39 15
40 12
41 22
95
1 94
2 88
3 13
4 71
5 37
6 45
7 87
8 24
9 76
10 54
11 69
12 95
13 90...

output:

WA

result:

wrong answer Wrong Answer

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #6:

0%

Subtask #8:

score: 0
Skipped

Dependency #7:

0%

Subtask #9:

score: 0
Skipped

Dependency #8:

0%

Subtask #10:

score: 0
Skipped

Dependency #9:

0%

Subtask #11:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%