Skip to Content

Phonomenal Reviews

Editorial oficial 

Implementación

#include <bits/stdc++.h> using namespace std; const int MX = 1e5 + 5; vector<int> g[MX]; int depth[MX]; bool use[MX]; int n, m, sol, node, mini, nodes; void dfs1(int v, int parent) { nodes++; for (auto x : g[v]) { if (x == parent || !use[x]) continue; depth[x] = depth[v] + 1; if (depth[x] > mini) { mini = depth[v]; node = x; } dfs1(x, v); } } void dfs(int v, int parent) { for (auto x : g[v]) { if (x == parent) continue; dfs(x, v); use[v] |= use[x]; } } int main() { cin >> n >> m; int root; for (int i = 0; i < m; i++) { int cur; cin >> cur; use[cur] = true; root = cur; } for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } dfs(root, -1); dfs1(root, -1); mini = 0; nodes = 0; memset(depth, 0, sizeof(depth)); dfs1(node, -1); sol = ((nodes - 1) * 2) - depth[node]; cout << sol << '\n'; }