QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#206804 | #7338. Education Nightmare | MaGnsi0 | WA | 3677ms | 39516kb | C++17 | 2.3kb | 2023-10-07 22:55:49 | 2023-10-07 22:55:49 |
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, dm[v] - ds[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: 3448kb
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: 3677ms
memory: 39516kb
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:
23 20 110 21 3 16 172 13 174 17 18 176 11 2147483647 198 8 2147483647 2147483647 184 18 186 184 140 114 7 176 2147483647 2147483647 2147483647 11 132 126 13 17 8 172 110 2147483647 19 2 3 21 17 26 17 6 140 134 102 12 2147483647 186 2147483647 2147483647 1 132 18 186 102 2147483647 2147483647 174 214...
result:
wrong answer 1st numbers differ - expected: '9', found: '23'