QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#628801 | #5124. Tree | daoqi | AC ✓ | 556ms | 159928kb | C++20 | 2.7kb | 2024-10-10 22:21:09 | 2024-10-10 22:21:11 |
Judging History
answer
#include<bits/stdc++.h>
using i64 = long long;
template<class T>
struct HLD {
int n;
std::vector<int> siz, top, parent, in, out, seq;
std::vector<std::vector<std::pair<int, T>>> adj;
std::vector<T> len, mx, dep;
int cur;
HLD() {}
HLD(int n_) {
init(n_);
}
void init(int _n) {//初始化
this->n = _n;
siz.resize(n);//子树大小
top.resize(n);//重链的顶端
dep.resize(n);//深度
parent.resize(n);//父节点
in.resize(n);//dfs序入
out.resize(n);//dfs序出
seq.resize(n);//记录dfsx序第几位是哪个节点
mx.resize(n);//记录这条链的最深的深度
len.resize(n);//这条链的长度
cur = 0;
adj.assign(n, {});
}
void addEdge(int u, int v, T w = 1) {
adj[u].emplace_back(v, w);
adj[v].emplace_back(u, w);
}
void work(int root = 1) {
top[root] = root;
dep[root] = 0;
parent[root] = -1;
dfs1(root);
len[root] = mx[root];
dfs2(root, 0);
}
void dfs1(int x) {
for (auto &v: adj[x]) {
auto [y, w] = v;
if (y == parent[x]) continue;
parent[y] = x;
mx[y] = dep[y] = dep[x] + w;
dfs1(y);
if (adj[x][0].first == parent[x] || mx[y] >= mx[adj[x][0].first]) {
mx[x] = mx[y];
std::swap(v, adj[x][0]);
}
}
}
void dfs2(int u, T tw) {
in[u] = ++cur;
seq[cur] = u;
for (auto [v, w]: adj[u]) {
if (v == parent[u]) continue;
top[v] = v == adj[u][0].first ? top[u] : v;
len[v] = v == adj[u][0].first ? len[u] : mx[v] - dep[v];
dfs2(v, v == adj[u][0].first ? tw : w);
}
out[u] = cur;
}
};
void DAOQI() {
int n;
std::cin >> n;
HLD<int> h(n + 1);
for (int i = 2; i <= n; i++) {
int x;
std::cin >> x;
h.addEdge(i, x);
}
h.work(1);
std::map<int, int> mp;
std::set<int> ans1;
int ans2 = 0;
for (int i = 1; i <= n; i++) {
mp[h.top[i]] = h.len[i] + 1;
}
std::vector<int> tmp;
for (auto [v, c]: mp) {
tmp.push_back(c);
}
std::sort(tmp.begin(), tmp.end(), std::greater<>());
int ans = tmp[0];
tmp.push_back(0);
for (int i = 0; i < tmp.size() - 1; i++) {
ans = std::min({ans, i + 1 + tmp[i + 1]});
}
std::cout << ans << "\n";
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T = 1;
std::cin >> T;
while (T--) DAOQI();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3568kb
input:
2 7 1 1 2 2 2 3 5 1 2 3 4
output:
3 1
result:
ok 2 number(s): "3 1"
Test #2:
score: 0
Accepted
time: 54ms
memory: 3580kb
input:
46234 1 2 1 3 1 1 4 1 1 1 5 1 1 1 1 6 1 1 1 1 1 7 1 1 1 1 1 1 8 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 2 9 1 1 1 1 1 1 1 3 9 1 1 1 1 1 1 1 4 9 1 1 1 1 1 1 1 5 9 1 1 1 1 1 1 1 6 9 1 1 1 1 1 1 1 7 9 1 1 1 1 1 1 1 8 8 1 1 1 1 1 1 2 9 1 1 1 1 1 1 2 1 9 1 1 1 1 1 1 2 2 9 1 1 1 1 1 1 2 3 9 1 1 1...
output:
1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 2 2 2 3 2 3 3 3 3 2 2 2 3 3 2 3 3 3 2 2 2 3 3 3 2 3 3 2 2 2 3 3 3 3 2 3 2 2 2 3 3 3 3 3 2 2 2 2 2 2 3 3 3 3 2 3 2 2 2 3 3 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 3 3 3 3 2 2 2 2 2 3 2 3 3 3 2 3 3 3 3 3 3 3 ...
result:
ok 46234 numbers
Test #3:
score: 0
Accepted
time: 114ms
memory: 159928kb
input:
1 1000000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 10...
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 257ms
memory: 155620kb
input:
1 1000000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
output:
2
result:
ok 1 number(s): "2"
Test #5:
score: 0
Accepted
time: 224ms
memory: 93200kb
input:
1 1000000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
output:
1000
result:
ok 1 number(s): "1000"
Test #6:
score: 0
Accepted
time: 556ms
memory: 93188kb
input:
1 1000000 1 1 1 2 3 4 5 6 7 3 6 8 9 10 13 11 12 13 14 15 8 16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 51 39 54 55 56 57 58 59 60 61 68 62 63 64 65 66 67 68 69 70 71 59 72 73 74 75 76 77 78 79 80 81 82 32 23 83 84 85 86 87 88 8...
output:
1405
result:
ok 1 number(s): "1405"
Test #7:
score: 0
Accepted
time: 555ms
memory: 93200kb
input:
1 1000000 1 1 1 1 2 3 4 5 6 7 8 9 10 11 14 1 12 13 14 15 19 16 17 18 19 20 21 20 22 23 24 25 26 27 28 20 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 29 46 47 48 49 50 51 52 53 54 53 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 51 76 77 78 79 80 81 82 83 84 85 86 23 87 88 89 ...
output:
1404
result:
ok 1 number(s): "1404"
Test #8:
score: 0
Accepted
time: 537ms
memory: 93100kb
input:
1 1000000 1 1 1 2 4 3 4 5 6 7 8 9 10 5 10 11 12 13 11 17 14 15 16 17 18 19 20 21 22 23 24 25 26 27 14 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 16 45 46 47 48 49 50 51 52 53 17 54 55 56 57 58 59 60 61 62 63 40 67 64 65 66 67 68 69 70 71 72 73 74 54 35 75 76 77 78 79 80 81 82 83 84 85 86 87 ...
output:
1406
result:
ok 1 number(s): "1406"
Test #9:
score: 0
Accepted
time: 263ms
memory: 16776kb
input:
7 142857 1 1 2 1 2 3 4 4 8 5 6 7 8 9 10 11 12 13 14 7 15 15 16 17 18 19 20 21 22 23 24 25 26 27 28 17 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 14 55 56 57 58 59 60 61 62 63 27 69 43 64 65 66 67 68 69 70 71 72 73 57 15 74 75 76 77 78 79 80 81 82 83 84 85 86 36 87 ...
output:
528 527 526 527 527 527 527
result:
ok 7 numbers
Test #10:
score: 0
Accepted
time: 223ms
memory: 12640kb
input:
10 100000 1 1 2 2 2 3 4 5 6 7 8 6 8 9 10 11 12 13 14 15 16 17 22 18 19 20 21 22 23 8 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 27 39 40 41 42 43 44 45 46 39 39 48 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 59 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89...
output:
439 439 441 439 441 441 442 441 441 440
result:
ok 10 numbers
Test #11:
score: 0
Accepted
time: 216ms
memory: 9636kb
input:
15 66666 1 2 3 1 2 3 4 5 6 1 7 8 9 10 2 11 12 13 14 15 16 17 18 19 20 21 19 22 23 24 25 26 27 34 28 29 30 31 32 33 34 10 35 36 37 38 39 40 41 42 22 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 57 20 62 63 64 65 66 67 68 69 70 71 77 72 73 74 75 76 77 78 79 80 81 82 83 77 84 85 86 87 88 89...
output:
360 358 359 359 359 359 359 360 359 360 359 361 358 360 359
result:
ok 15 numbers
Test #12:
score: 0
Accepted
time: 149ms
memory: 5168kb
input:
57 17543 1 1 2 2 3 5 4 5 6 3 7 8 9 10 3 1 4 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 25 32 33 34 35 36 37 38 39 3 40 41 42 43 44 45 46 47 48 6 49 50 51 52 53 54 55 56 57 58 26 59 60 61 62 63 64 65 66 67 68 69 69 17 70 71 72 73 74 75 76 77 78 79 80 81 54 82 83 84 85 86 87 88 89 ...
output:
181 182 181 182 182 183 183 183 182 183 183 182 181 184 183 183 182 181 181 183 182 183 181 183 182 182 182 183 183 183 180 182 183 183 182 181 181 181 183 183 182 182 180 182 181 183 182 182 183 183 183 181 180 181 181 182 183
result:
ok 57 numbers
Test #13:
score: 0
Accepted
time: 126ms
memory: 4552kb
input:
100 10000 1 2 2 2 3 5 3 4 5 6 7 8 9 10 11 12 13 14 15 9 8 16 17 18 19 20 2 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 11 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 3 49 19 21 13 61 62 63 64 65 66 67 68 69 20 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 8...
output:
136 138 138 136 135 137 136 136 137 138 137 137 138 138 138 137 137 137 138 137 137 136 138 136 138 138 138 137 137 138 137 136 136 137 137 137 137 138 137 136 137 138 136 136 138 138 136 137 137 138 136 137 137 138 137 138 137 138 136 135 138 137 136 137 134 137 137 136 137 137 135 136 138 138 136 ...
result:
ok 100 numbers
Test #14:
score: 0
Accepted
time: 123ms
memory: 3664kb
input:
1000 1000 1 1 2 3 5 4 5 5 9 6 7 8 9 10 11 12 13 17 9 14 15 16 17 18 1 19 20 21 22 23 24 25 3 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 30 43 44 45 46 47 48 49 50 51 8 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 70 71 50 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 9...
output:
43 42 42 42 41 41 42 41 42 42 41 42 42 42 42 41 42 41 42 42 42 41 42 41 42 42 42 40 43 40 42 42 40 42 42 42 41 41 42 41 41 41 42 42 42 41 42 41 42 42 42 42 42 42 41 42 43 41 40 41 42 42 42 43 42 40 41 42 42 41 41 41 42 42 43 41 41 41 42 40 42 42 42 42 41 42 42 42 42 43 41 41 42 41 41 41 42 42 42 42 ...
result:
ok 1000 numbers
Test #15:
score: 0
Accepted
time: 130ms
memory: 3636kb
input:
10000 100 1 1 3 2 2 3 4 5 7 6 7 8 9 10 11 12 13 14 4 2 10 15 16 17 18 19 5 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 23 46 47 48 49 50 51 52 53 54 16 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 13 37 49 76 77 78 79 80 81 82 83 84 85 86 100 1 2 2...
output:
12 12 13 12 12 12 12 11 12 12 12 12 13 13 12 12 12 11 13 13 12 12 13 12 12 12 12 13 13 13 12 12 12 13 11 13 13 12 12 12 13 12 12 12 12 12 12 12 12 11 12 13 11 13 12 12 12 12 12 12 12 13 12 12 12 11 12 12 13 13 12 13 12 13 12 11 12 11 11 12 13 12 13 12 12 13 12 12 12 12 12 12 12 12 12 12 12 11 12 13 ...
result:
ok 10000 numbers
Test #16:
score: 0
Accepted
time: 116ms
memory: 3644kb
input:
100000 10 1 2 1 2 3 4 5 6 7 10 1 1 1 2 3 6 4 5 6 10 1 1 3 2 3 1 4 5 6 10 1 2 1 2 3 4 5 6 7 10 1 2 3 1 2 3 4 5 6 10 1 2 1 2 3 4 5 6 7 10 1 1 2 4 3 4 5 6 7 10 1 1 1 2 3 4 5 6 7 10 1 2 2 4 3 3 4 5 6 10 1 2 1 2 3 4 5 6 7 10 1 1 3 2 3 6 4 5 6 10 1 2 2 4 3 2 4 5 6 10 1 1 1 2 3 5 4 5 6 10 1 2 2 4 3 4 5 6 7...
output:
3 4 4 3 3 3 3 3 3 3 4 3 4 3 4 4 3 3 3 3 3 4 4 4 4 3 3 3 3 3 4 4 4 4 3 3 3 3 3 4 3 4 4 3 3 4 3 3 4 3 4 3 3 3 3 3 4 3 3 3 3 4 3 3 3 3 3 4 3 3 4 3 4 4 3 3 4 3 3 4 3 3 3 4 4 3 3 3 3 3 4 3 4 4 3 3 3 3 4 3 4 3 3 4 3 3 4 3 4 4 3 3 4 4 4 3 3 3 3 3 4 3 3 3 4 3 4 3 3 3 3 4 3 4 3 4 3 4 3 4 3 3 3 4 4 3 4 4 3 3 ...
result:
ok 100000 numbers