Submission #1313267

#TimeUsernameProblemLanguageResultExecution timeMemory
1313267hssaan_arifRailway (BOI17_railway)C++20
100 / 100
125 ms50396 KiB
// #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <unordered_map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> using namespace std; #define endl "\n" #define pb push_back #define int long long #define fi first #define se second const int N = 3e5 + 5, M = 1e9 + 7, LG = 20; int n , A[N] , m , k , In[N] , in = 1 , W[N] , sp[N][LG] , u , v , Dep[N] , sz , x; map<pair<int,int> , int> mp; vector<int> ans , lis[N]; void dfs(int v , int par){ Dep[v] = Dep[par]+1; sp[v][0] = par; In[v] = in; in++; for (int u : lis[v]){ if (par == u) continue; dfs(u , v); } } int lca(int u , int v){ if (Dep[v] > Dep[u]){ swap(u,v); } int dif = Dep[u] - Dep[v]; for (int i=LG-1 ; i>=0 ; i--){ if ((1<<i) & dif){ u = sp[u][i]; } } if (u == v){ return u; } for (int i=LG-1 ; i>=0 ; i--){ if (sp[u][i] != sp[v][i]){ u = sp[u][i]; v = sp[v][i]; } } return sp[u][0]; } void dfs1(int v , int par){ for (int u : lis[v]){ if (u==par) continue; dfs1(u , v); W[v] += W[u]; } if (W[v] >= k){ ans.pb(mp[{v,par}]); } } void solve(){ cin >> n >> m >> k; for (int i=1 ; i<n ; i++){ cin >> u >> v; mp[{u,v}] = mp[{v,u}] = i; lis[u].pb(v); lis[v].pb(u); } dfs(1 , 1); for (int i=1 ; i<LG ; i++){ for (int j=1 ; j<=n ; j++){ sp[j][i] = sp[sp[j][i-1]][i-1]; } } while(m--){ cin >> sz; vector<pair<int,int>> p; for (int i=1 ; i<=sz ; i++){ cin >> x; W[x]++; p.pb({In[x],x}); } sort(p.begin(),p.end()); for (int i=0 ; i<sz ; i++){ W[lca(p[i].se , p[(i+1)%sz].se)]--; } } dfs1(1 , 1); cout << ans.size() << endl; sort(ans.begin(),ans.end()); for (int i : ans){ cout << i << ' '; } cout << endl; } signed main(){ // freopen("" , "r" , stdin); // freopen("" , "w" , stdout); // cout << setprecision(30); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int ts = 1; // cin >> ts; while(ts--){ 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...