제출 #1263940

#제출 시각아이디문제언어결과실행 시간메모리
1263940nguyenvietanhPastiri (COI20_pastiri)C++20
100 / 100
372 ms81968 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pii pair<int,int> #define inp(name) freopen(name, "r", stdin); #define out(name) freopen(name, "w", stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int rnd(int l, int r){ return (l + (rng() % (r - l + 1))); } const int N = 5e5 + 5; const int mod = 998244353; int n, k; int a[N], depth[N], d[N], ans[N], check[N]; vector <int> adj[N]; bool cmp(int a, int b){ return depth[a] > depth[b]; } void bfs(){ queue <int> q; fill (d + 1, d + n + 1, 1e9); for (int i = 1; i <= k; i ++){ d[a[i]] = 0; q.push(a[i]); } while (!q.empty()){ int u = q.front(); q.pop(); for (auto i : adj[u]){ if (d[i] == 1e9){ d[i] = d[u] + 1; q.push(i); } } } } void pre_dfs(int u, int v){ for (auto i : adj[u]){ if (i == v) continue; depth[i] = depth[u] + 1; pre_dfs(i, u); } } void dfs(int u, int v, int res, int node){ if (res < depth[u] + d[u]){ res = depth[u] + d[u]; node = u; } ans[u] = node; for (auto i : adj[u]){ if (i == v) continue; dfs(i, u, res, node); } } void update(int u){ check[u] = 1; for (auto i : adj[u]){ if (check[i] || d[i] + 1 != d[u]) continue; update(i); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i = 1; i < n; i ++){ int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int i = 1; i <= k; i ++){ cin >> a[i]; } bfs(); pre_dfs(1, 0); dfs(1, 0, 0, 1); sort(a + 1, a + k + 1, cmp); vector <int> trace; for (int i = 1; i <= k; i ++){ if (check[a[i]]) continue; trace.push_back(ans[a[i]]); update(ans[a[i]]); } cout << trace.size() << '\n'; for (auto i : trace) cout << i << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...