QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#206803 | #7338. Education Nightmare | MaGnsi0 | WA | 3284ms | 39600kb | C++17 | 2.3kb | 2023-10-07 22:55:17 | 2023-10-07 22:55:18 |
Judging History
answer
/**
* author: MaGnsi0
* created: 07.10.2023 12:42:52
**/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int T;
cin >> T;
while (T--) {
int n, s, m;
cin >> n >> s >> m;
vector<vector<int>> adj(n);
for (int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
adj[u - 1].push_back(v - 1);
adj[v - 1].push_back(u - 1);
}
vector<bool> on_path(n, false), m_sup(n, false);
vector<int64_t> dm(n, 0), ds(n, 0), par(n, -1);
function<void(int, int, bool)> dfs1 = [&](int v, int p, bool x) {
bool y = x || (v == m - 1);
if (y) { m_sup[v] = true; }
for (int u : adj[v]) {
if (u == p) { continue; }
par[u] = v;
ds[u] = ds[v] + 1;
dfs1(u, v, y);
}
};
dfs1(s - 1, -1, false);
function<void(int, int)> dfs2 = [&](int v, int p) {
for (int u : adj[v]) {
if (u == p) { continue; }
dm[u] = dm[v] + 1;
dfs2(u, v);
}
};
dfs2(m - 1, -1);
for (int u = m - 1; u != -1; u = par[u]) {
on_path[u] = true;
}
vector<int> I(n);
iota(I.begin(), I.end(), 0);
sort(I.begin(), I.end(), [&](int i, int j) {
return dm[i] > dm[j];
});
int64_t ans = INT_MAX, x = 0;
set<int> picked;
multiset<int64_t> not_picked;
for (int i = 0; i < n; ++i) {
if (!on_path[i] && !m_sup[i]) {
not_picked.insert(dm[i]);
ans = max(ans, ds[m - 1] + dm[i]);
} else {
ans = max(ans, ds[i]);
}
}
for (int v : I) {
if (m_sup[v]) { break; }
while (!picked.count(v) && !on_path[v]) {
picked.insert(v);
not_picked.erase(not_picked.find(dm[v]));
x = max(x, ds[v] - dm[v]);
v = par[v];
}
ans = min(ans, ds[m - 1] + x + (not_picked.empty() ? 0 : *not_picked.rbegin()) + 2 * (int64_t)picked.size());
}
cout << ans << "\n";
}
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3812kb
input:
1 4 2 3 1 2 1 3 1 4
output:
4
result:
ok 1 number(s): "4"
Test #2:
score: -100
Wrong Answer
time: 3284ms
memory: 39600kb
input:
14966 15 13 8 7 14 7 10 5 3 1 3 15 3 1 13 9 5 7 2 6 13 10 11 13 8 5 10 5 12 14 4 16 14 9 16 11 14 9 8 15 14 15 13 10 6 11 3 2 9 5 6 7 10 6 6 8 1 5 15 4 10 2 11 12 100 49 58 67 43 55 34 84 42 3 74 84 54 20 6 86 83 88 51 2 99 4 78 91 64 14 59 82 38 91 44 24 12 12 2 39 19 43 46 5 80 41 35 80 97 79 8 47...
output:
22 19 102 17 3 15 118 14 107 15 13 169 8 2147483647 121 7 2147483647 2147483647 104 17 158 144 78 102 7 106 2147483647 2147483647 2147483647 11 75 99 14 14 7 161 95 2147483647 17 2 3 22 15 23 15 6 74 86 63 11 2147483647 149 2147483647 2147483647 1 81 13 131 69 2147483647 2147483647 120 2147483647 7 ...
result:
wrong answer 1st numbers differ - expected: '9', found: '22'