Submission #1286993

#TimeUsernameProblemLanguageResultExecution timeMemory
1286993MasterMoonRailway (BOI17_railway)C++20
100 / 100
61 ms23500 KiB
#include <bits/stdc++.h> using namespace std; #define __Master_Moon__ int main() #define ll long long #define el "\n" #define fi first #define sq(x) (x)*(x) #define se second #define pub push_back #define puf push_front #define pii pair <int, int> #define pll pair <long long, long long> #define piii pair <int, pair <int, int>> #define iiii pair <int, pair <int, pair <int, int>>> #define plll pair <long long, pair <long long, long long>> #define FOR(i, a, b) for(ll i = (a);i <=(b);i++) #define FO(i, a, b) for(int i = (a);i >= (b);i--) #define REP(i, n) for(int i = 0;i < (n);i++) long const maxn = 1e5 + 50; long const lg = 22; int n,m,k,timer,h[maxn],p[maxn][lg],id[maxn]; int a[maxn],in[maxn]; vector<pii> g[maxn]; vector<int> ans; bool cmp(int u,int v) { return in[u] < in[v]; } void dfs(int u,int par) { h[u] = h[par] + 1; in[u] = ++timer; for(pii x : g[u]) { if(x.fi != par) { id[x.fi] = x.se; p[x.fi][0] = u; dfs(x.fi,u); } } } void dfs2(int u,int par) { for(pii x : g[u]) { if(x.fi != par) { dfs2(x.fi,u); a[u] += a[x.fi]; } } } int lca(int u,int v) { if(h[u] < h[v]) swap(u,v); int tmp = h[u] - h[v]; FO(i,20,0) { if(tmp >= (1<<i)) { tmp -= (1<<i); u = p[u][i]; } } if(u == v) return u; FO(i,20,0) { if(p[u][i] != p[v][i]) { u = p[u][i]; v = p[v][i]; } } return p[u][0]; } void solve() { cin >> n >> m >> k; REP(i,n-1) { int u,v; cin >> u >> v; g[u].pub({v,i}); g[v].pub({u,i}); } dfs(1,0); FOR(i,1,20) FOR(j,1,n) p[j][i] = p[p[j][i-1]][i-1]; REP(i,m) { vector<int> v; int t; cin >> t; REP(i,t) { int tmp; cin >> tmp; v.pub(tmp); } sort(v.begin(),v.end(),cmp); v.pub(v[0]); int pre = 0; for(int x : v) { if(pre != 0) { a[x]++; a[pre]++; a[lca(x,pre)]-=2; } pre = x; } } dfs2(1,0); FOR(i,1,n) if(a[i]/2 >= k) ans.pub(id[i]+1); sort(ans.begin(),ans.end()); cout << ans.size() << el; for(int x : ans) cout << x << ' '; } __Master_Moon__ { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); 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...