This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/**
____ ____ ____ ____ ____
||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, bool below = false) {
up[u] += below;
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] + max(0, sons - 1);
dfs(v, (below == true || u == M));
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], 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);
aux += block[i];
}
cout << answer << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |