Submission #1210706

#TimeUsernameProblemLanguageResultExecution timeMemory
1210706vaneaRailway (BOI17_railway)C++20
100 / 100
62 ms22976 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define LSOne(S) ((S) & (-S)) const int mxN = 1e5+10; vector<array<int, 2>> adj[mxN]; int timer = 0, tin[mxN], tout[mxN], p_edge[mxN]; int anc[mxN][20], bit[mxN+50], d[mxN]; void dfs(int node, int p) { anc[node][0] = p; tin[node] = ++timer; for(int k = 1; k <= 18; k++) { anc[node][k] = anc[anc[node][k-1]][k-1]; } for(auto [it, i] : adj[node]) { if(it == p) continue; p_edge[it] = i; d[it] = d[node]+1; dfs(it, node); } tout[node] = timer; } void jmp(int &x, int dist) { for(int k = 18; k >= 0; k--) { if(dist & (1 << k)) x = anc[x][k]; } } int lca(int a, int b) { if(d[b] > d[a]) swap(a, b); jmp(a, d[a]-d[b]); if(a == b) return a; for(int k = 18; k >= 0; k--) { if(anc[a][k] != anc[b][k]) { a = anc[a][k]; b = anc[b][k]; } } return anc[a][0]; } void upd(int x, int val) { for(; x <= mxN; x += LSOne(x)) { bit[x] += val; } } int qry(int x) { int ans = 0; for(; x >= 1; x -= LSOne(x)) { ans += bit[x]; } return ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, k; cin >> n >> m >> k; for(int i = 1; i < n; i++) { int a, b; cin >> a >> b; adj[a].push_back({b, i}); adj[b].push_back({a, i}); } dfs(1, 0); while(m--) { int s; cin >> s; vector<int> v(s+1); for(int i = 0; i < s; i++) { cin >> v[i]; } sort(v.begin(), v.end()-1, [&](int a, int b) { return tin[a] < tin[b]; }); v[s] = v[0]; for(int i = 0; i < s; i++) { int l = lca(v[i], v[i+1]); upd(tin[v[i]], 1); upd(tin[v[i+1]], 1); upd(tin[l], -2); } } vector<int> ans; for(int i = 1; i <= n; i++) { int now = qry(tout[i]) - qry(tin[i]-1); if(now >= 2*k) ans.push_back(p_edge[i]); } sort(ans.begin(), ans.end()); cout << ans.size() << '\n'; for(auto it : ans) { cout << it << ' '; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...