Submission #1252234

#TimeUsernameProblemLanguageResultExecution timeMemory
1252234knhatdevValley (BOI19_valley)C++20
0 / 100
111 ms54368 KiB
#include<bits/stdc++.h> #define int long long #define ii pair<int,int> #define fi first #define se second using namespace std; const int N = 1e5 + 5, oo = 1e18; int n, s, q, e, f[N], dist[N]; int up[N][25], mi[N][25], h[N]; int tin[N], tout[N], timeDfs; vector<ii> g[N]; struct EDGE { int u, v, c; } edge[N]; void dfs(int u, int par) { tin[u] = ++timeDfs; for(auto &[v, c] : g[u]) { if(v == par) continue; dist[v] = dist[u] + c; up[v][0] = u; for(int j = 1; j <=18; j++) up[v][j] = up[up[v][j - 1]][j - 1]; h[v] = h[u] + 1; dfs(v, u); if(f[v] != oo) f[u] = min(f[u], f[v] + c); mi[v][0] = min(f[v] - dist[v], f[u] - dist[u]); } tout[u] = timeDfs; } void init() { for(int j = 1; j <= 18; j++) { for(int i = 1; i <= n; i++) { mi[i][j] = min(mi[i][j], mi[up[i][j - 1]][j - 1]); } } } main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> s >> q >> e; for(int i = 1; i < n; i++) { int u, v, c; cin >> u >> v >> c; edge[i] = {u, v, c}; g[u].push_back({v, c}); g[v].push_back({u, c}); } for(int i = 1; i <= n; i++) f[i] = oo; for(int i = 1; i <= s; i++) { int u; cin >> u; f[u] = 0; } for(int j = 0; j <= 18; j++) up[e][j] = e; h[e] = 1; dfs(e, -1); init(); while(q--) { int i, r; cin >> i >> r; int u = edge[i].u; int v = edge[i].v; if(dist[v] > dist[u]) swap(u, v); if(tin[u] <= tin[r] && tout[u] >= tin[r]) { int tmp_r = r; int ans = min(oo, dist[r] + f[r]); for(int j = 18; j >= 0; j--) { if(h[up[tmp_r][j]] >= h[u]) { ans = min(ans, dist[r] + mi[tmp_r][j]); tmp_r = up[tmp_r][j]; } } if(ans == oo) cout << "oo" << '\n'; else cout << ans << '\n'; } else { cout << "escaped\n"; } } }

Compilation message (stderr)

valley.cpp:46:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   46 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...