Submission #381602

#TimeUsernameProblemLanguageResultExecution timeMemory
381602VimmerPastiri (COI20_pastiri)C++14
0 / 100
1114 ms524292 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("-O3") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-Ofast") #define N 500050 #define NN 1005000 #define PB push_back #define endl '\n' #define pri(x) cout << x << endl #define _ << " " << #define all(x) x.begin(), x.end() #define sz(x) int(x.size()) #define M ll(1e9 + 7) #define F first #define S second using namespace std; //using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef short int si; typedef unsigned long long ull; //typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; //ordered_set se; int n, k; bool mk[N], mkr[N]; set <int> g[N]; vector <pair <int, int> > who[N]; int main() { ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("1.in", "r", stdin); // // freopen("1.out", "w", stdout); cin >> n >> k; for (int i = 1; i < n; i++) { int x, y; cin >> x >> y; g[x].insert(y); g[y].insert(x); } for (int i = 0; i < k; i++) { int x; cin >> x; mk[x] = 1; } queue <int> qr; for (int i = 1; i <= n; i++) { if (mk[i]) { mkr[i] = 1; who[i].PB({i, 0}); } if (sz(g[i]) == 1) { qr.push(i); } } while (sz(qr)) { int v = qr.front(); qr.pop(); int u = *g[v].begin(); g[v].clear(); g[u].erase(v); vector <pair <int, int> > cur; cur.clear(); int i = 0, j = 0; while (i < sz(who[u]) || j < sz(who[v])) { pair <int, int> pt; if (j < sz(who[v]) && (i == sz(who[u]) || who[u][i].S > who[u][j].S)) { pt = who[v][j++]; pt.S++; } else pt = who[u][i++]; if (sz(cur) == 1 && cur.back().S == pt.S) { mkr[pt.F] = 0; mkr[cur.back().F] = 0; mkr[u] = 1; cur.back().F = u; continue; } else cur.PB(pt); } if (sz(g[u]) == 1) qr.push(u); who[u] = cur; } vector <int> ans; ans.clear(); for (int i = 1; i <= n; i++) if (mkr[i]) ans.PB(i); pri(sz(ans)); for (auto it : ans) cout << it << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...