Submission #1306664

#TimeUsernameProblemLanguageResultExecution timeMemory
1306664tntRailway (BOI17_railway)C++20
100 / 100
62 ms24232 KiB
#include <bits/stdc++.h> using namespace std; //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") #define pb push_back #define ll long long #define f first #define s second #define sz(v) int(v.size()) #define all(v) v.begin(),v.end() int mod = 1e9 + 7; const int N = 2e5; const int inf = 1e9; int up[N][20],tin[N],tout[N],d[N]; int timer; vector <int> g[N]; vector <pair <int,int>> e; void calc(int u,int p){ tin[u] = ++timer; up[u][0] = p; for(int i = 1; i < 20; i++){ up[u][i] = up[up[u][i - 1]][i - 1]; } for(auto to : g[u]){ if(to == p) continue; d[to] = d[u] + 1; calc(to,u); } tout[u] = timer; } int pr(int u,int v){ return (tin[v] <= tin[u] && tout[v] >= tout[u]); } int lca(int u,int v){ if(pr(u,v)) return v; if(pr(v,u)) return u; for(int i = 19; i >= 0; i--){ if(!pr(v,up[u][i])) u = up[u][i]; } return up[u][0]; } int cnt[N],sz[N]; void dfs(int u,int p){ sz[u] = cnt[u]; for(auto to : g[u]){ if(to == p) continue; dfs(to,u); sz[u] += sz[to]; } } void solve(){ int n,m,k; cin >> n >> m >> k; for(int i = 1; i < n; i++){ int u,v; cin >> u >> v; e.pb({u,v}); g[u].pb(v),g[v].pb(u); } calc(1,1); vector <pair<int,int>> st; while(m--){ int d; cin >> d; while(d--){ int x; cin >> x; st.pb({tin[x],x}); } sort(all(st)); st.pb(st[0]); for(int i = 0; i < st.size() - 1; i++){ int u = st[i].s,v = st[i + 1].s; int lc = lca(u,v); cnt[u]++,cnt[v]++,cnt[lc] -= 2; } st.clear(); } dfs(1,1); vector <int> ans; for(int i = 0; i < e.size(); i++){ int u = e[i].f,v = e[i].s; if(d[u] > d[v]) swap(u,v); if(sz[v] >= 2 * k) ans.pb(i + 1); } cout << ans.size() << '\n'; for(auto to : ans) cout << to << ' '; } signed main(){ //freopen("time.in", "r", stdin); //freopen("time.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int t1 = 1; while(t1--){ 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...