Submission #884748

#TimeUsernameProblemLanguageResultExecution timeMemory
884748Shayan86Railway (BOI17_railway)C++14
100 / 100
108 ms33108 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") // Ofast, O0, O1, O2, O3, unroll-loops, fast-math, trapv typedef long long ll; typedef pair<ll, ll> pll; typedef pair<int, int> pii; #define Mp make_pair #define sep ' ' #define endl '\n' #define F first #define S second #define pb push_back #define all(x) (x).begin(),(x).end() #define kill(res) cout << res << '\n', exit(0); #define set_dec(x) cout << fixed << setprecision(x); #define fast_io ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("input.txt", "r", stdin) ; freopen("output.txt", "w", stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll L = 20; const ll N = 1e5 + 50; const ll Mod = 1e9 + 7; ll n, m, k, st[N], timer, h[N], par[N][L], id[N], cnt[N]; vector<pii> adj[N]; void dfs(int v, int p = 0){ par[v][0] = p; for(int i = 1; i < L; i++){ if(!par[v][i-1]) break; par[v][i] = par[par[v][i-1]][i-1]; } st[v] = ++timer; for(auto [u, i]: adj[v]){ if(u == p) continue; h[u] = h[v] + 1; id[i] = u; dfs(u, v); } } int getPar(int v, int x){ for(int i = 0; i < L; i++){ if(x >> i & 1) v = par[v][i]; } return v; } int lca(int v, int u){ if(h[v] < h[u]) swap(u, v); v = getPar(v, h[v] - h[u]); if(u == v) return v; for(int i = L-1; i >= 0; i--){ if(par[v][i] != par[u][i]){ v = par[v][i]; u = par[u][i]; } } return par[v][0]; } void cal(int v){ for(auto [u, i]: adj[v]){ if(u == par[v][0]) continue; cal(u); cnt[v] += cnt[u]; } } int main(){ fast_io; cin >> n >> m >> k; int u, v; for(int i = 1; i < n; i++){ cin >> u >> v; adj[u].pb(Mp(v, i)); adj[v].pb(Mp(u, i)); } dfs(1); while(m--){ int si; cin >> si; set<pii> ver; for(int i = 1; i <= si; i++){ cin >> v; ver.insert({st[v], v}); } while(ver.size() > 1){ auto lst1 = *ver.rbegin(); ver.erase(lst1); auto lst2 = *ver.rbegin(); int l = lca(lst1.S, lst2.S); cnt[lst1.S]++; cnt[l]--; ver.insert({st[l], l}); } } //for(int i = 1; i <= n; i++) cout << cnt[i] << sep; cal(1); int res = 0; for(int i = 1; i < n; i++) if(cnt[id[i]] >= k) res++; cout << res << endl; for(int i = 1; i < n; i++) if(cnt[id[i]] >= k) cout << i << sep; }

Compilation message (stderr)

railway.cpp: In function 'void dfs(int, int)':
railway.cpp:42:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   42 |     for(auto [u, i]: adj[v]){
      |              ^
railway.cpp: In function 'void cal(int)':
railway.cpp:70:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   70 |     for(auto [u, i]: adj[v]){
      |              ^
#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...