제출 #1042989

#제출 시각아이디문제언어결과실행 시간메모리
1042989pacmanRailway (BOI17_railway)C++17
100 / 100
154 ms42700 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 100, lg = 30; int n ,m ,k, st[maxn], fn[maxn], cnt , par[lg][maxn], h[maxn], dp[maxn]; vector<int> adj[maxn]; map<pair<int, int>, int> mapi; vector<pair<int, int>> q; vector<int> ans; void dfs(int v ,int mpar = 0){ st[v] = cnt++; par[0][v] = mpar; for(int i = 1 ; i < lg ; i++){ par[i][v] = par[i - 1][par[i - 1][v]]; } for(auto u : adj[v]){ if(u != mpar){ h[u] = h[v] + 1; dfs(u, v); } } fn[v] = cnt++; } int lca(int u ,int v){ if(h[v] >= h[u]){ swap(v ,u); } for(int i = lg - 1 ;i >= 0 ; i--){ if(h[par[i][u]] >= h[v]){ u = par[i][u]; } } if(u == v){ return u; } for(int i= lg - 1; i >= 0 ; i--){ if(par[i][u] != par[i][v]){ u = par[i][u] , v = par[i][v]; } } return par[0][u]; } void check(int v ,int mpar = 0){ for(auto u : adj[v]){ if(u != mpar){ check(u, v); } } dp[mpar] += dp[v]; if(dp[v] >= (2 * k) and mapi[{v ,mpar}] != 0){ ans.push_back(mapi[{v ,mpar}]); } } int main(){ ios::sync_with_stdio(0), cout.tie(0), cin.tie(0); cin >> n >> m >> k; for(int i = 1 ;i < n; i++){ int x ,y; cin >> x >> y; adj[x].push_back(y); adj[y].push_back(x); mapi[{x ,y}]= i; mapi[{y , x}]= i; } //h[1] = 1; dfs(1); while(m--){ int x; cin >> x; q.push_back({0, 0}); for(int i = 1 ; i <= x ; i++){ int y; cin >> y; q.push_back({st[y], y}); } sort(q.begin(), q.end()); for(int i = 2 ; i <= x ; i++){ dp[q[i - 1].second]++; dp[q[i].second]++; dp[lca(q[i].second, q[i - 1].second)] -= 2; } dp[q[1].second]++; dp[q[x].second]++; dp[lca(q[x].second, q[1].second)] -= 2; q.clear(); } check(1); sort(ans.begin(), ans.end()); cout << ans.size() << endl; for(auto i : ans){ cout << i << ' '; } cout << endl; 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...