Submission #747461

#TimeUsernameProblemLanguageResultExecution timeMemory
747461vjudge1Railway (BOI17_railway)C++17
0 / 100
91 ms23044 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 100001; const int K = 20; int n, m, k, x; vector<pair<int, int>> g[MAXN]; int cnt[MAXN], up[MAXN][K], d[MAXN]; void dfs(int u, int p = 0) { d[u] = d[p] + 1; up[u][0] = p; for (int i = 1; i < K; i++) { up[u][i] = up[up[u][i-1]][i-1]; } for (auto [v, idx] : g[u]) { if (v != p) { dfs(v, u); } } } int lca(int a, int b) { int i=19; if(d[a] < d[b])swap(a, b); while(i>=0 && d[a] > d[b]){ if(d[up[a][i]]>=d[b])a=up[a][i]; i--; } if(a==b)return a; for(i=19;i>0;i--){ if(up[a][i]!=up[b][i]){ a=up[a][i]; b=up[b][i]; } } return up[a][0]; } vector<int> ans; int dfs2(int x, int p, int id){ for(auto [u, idx] : g[x]){ if(u!=p) cnt[x]+=dfs2(u, x, idx); } if(cnt[x]>=k && id)ans.push_back(id); return cnt[x]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k; for (int i = 1; i <= n - 1; i++) { int a, b; cin >> a >> b; g[a].push_back({b,i}); g[b].push_back({a,i}); } dfs(1); for (int i = 1; i <= m; i++) { cin >> x; if(x!=2)x/=0; int a, b; cin >> a >> b; int u = lca(a, b); cnt[u] -= 2; cnt[a]++; cnt[b]++; } dfs2(1, 0, 0); cout<<ans.size()<<'\n'; for(int i:ans)cout<<i<<' '; cout<<endl; return 0; }

Compilation message (stderr)

railway.cpp: In function 'int main()':
railway.cpp:63:18: warning: division by zero [-Wdiv-by-zero]
   63 |         if(x!=2)x/=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...