Submission #976386

#TimeUsernameProblemLanguageResultExecution timeMemory
976386efedmrlrPastiri (COI20_pastiri)C++17
100 / 100
674 ms95312 KiB
// #pragma GCC optimize("O3,Ofast,unroll-loops") // #pragma GCC target("avx2,bmi,popcnt") #include <bits/stdc++.h> #define lli long long int #define ld long double #define REP(i, n) for(int i = 0; (i) < (n); (i)++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define pb push_back #define MP make_pair using namespace std; void fastio() { ios_base::sync_with_stdio(false); cin.tie(NULL); } const int N = 5e5 + 5; const int INF = 1e9 + 500; const int MOD = 1e9 + 7; vector<vector<int> > adj(N, vector<int>()), g(N, vector<int>()); vector<int> she; vector<int> dist(N, -1), dep(N, 0); vector<int> p(N, 0); vector<int> vis(N, 0), a(N, 0); void bfs() { queue<int> qu; for(auto c : she) { dist[c] = 0; qu.push(c); } while(qu.size()) { auto cur = qu.front(); qu.pop(); for(auto c : adj[cur]) { if(dist[c] != -1) continue; dist[c] = dist[cur] + 1; qu.push(c); } } } void dfs(int node, int par) { for(auto c : adj[node]) { if(c == par) continue; dep[c] = dep[node] + 1; p[c] = node; dfs(c, node); } } void dfs2(int node) { vis[node] = 1; for(auto c : g[node]) { if(vis[c]) continue; dfs2(c); } } void solve() { int n, k; cin >> n >> k; REP(i, n - 1) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } she.resize(k); REP(i, k) { cin >> she[i]; } dfs(1, 0); bfs(); // for(int i = 1; i <= n; i++) { // cout << "i:" << i << " dep:" << dep[i] << " dist:" << dist[i] << "\n"; // } for(auto c : she) { int last = c; while(last != 1 && dist[last] < dist[p[last]]) { last = p[last]; } a[c] = last; // cout << "c:" << c << " ac:" << a[c] << "\n"; } for(int i = 1; i <= n; i++) { for(int c : adj[i]) { if(dist[c] == dist[i] + 1) { g[c].pb(i); } } } sort(all(she), [](int x, int y) { return dep[x] > dep[y]; }); vector<int> res; for(auto c : she) { if(vis[c]) continue; res.pb(a[c]); dfs2(a[c]); } cout << res.size() << "\n"; for(auto c : res) { cout << c << " "; } cout << "\n"; } signed main() { fastio(); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...