/**
____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|
**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N_MAX = (int) 1e6;
int N, T, M;
vector <int> adj[N_MAX + 2];
int parent[N_MAX + 2];
int up[N_MAX + 2];
int down[N_MAX + 2];
void dfs (int u) {
int sons = (int) adj[u].size() - (u != T);
int max1 = 0, max2 = 0;
for (int v : adj[u]) {
if (v != parent[u]) {
parent[v] = u;
up[v] = up[u] + sons;
dfs(v);
if (down[v] >= max1) {
max2 = max1;
max1 = down[v];
} else if (down[v] > max2) {
max2 = down[v];
}
}
}
if (sons == 0) {
down[u] = up[u];
} else if (sons == 1) {
down[u] = up[u] + 1;
} else {
down[u] = max2;
}
}
int path[N_MAX + 2];
int len;
multiset <pair <int, int>> s;
int maxDown[N_MAX + 2];
int block[N_MAX + 2];
int main () {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N >> T >> M;
for (int i = 1; i <= N - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(T);
int u = M;
while (u != T) {
path[++len] = u;
u = parent[u];
}
path[++len] = T;
for (int i = 1; i <= len; i++) {
int u = path[i];
for (int v : adj[u]) {
if (v != parent[u] && v != path[i - 1]) {
s.insert(make_pair(down[v] - (len - i), i));
}
}
if (s.empty() == false) {
multiset <pair <int, int>> :: iterator it = prev(s.end());
block[it->second]++;
s.erase(it);
}
maxDown[i] = (s.empty() == false ? prev(s.end())->first : 0);
}
int answer = 0;
int aux = 0;
for (int i = 1; i <= len; i++) {
answer = max(answer, maxDown[i]);
aux += block[i];
}
cout << answer << "\n";
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
12 ms |
23764 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
269 ms |
66948 KB |
Output is correct |
2 |
Correct |
259 ms |
62580 KB |
Output is correct |
3 |
Correct |
668 ms |
68084 KB |
Output is correct |
4 |
Correct |
302 ms |
46080 KB |
Output is correct |
5 |
Correct |
641 ms |
68076 KB |
Output is correct |
6 |
Correct |
709 ms |
81136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
12 ms |
23764 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
12 ms |
23764 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |