제출 #1139768

#제출 시각아이디문제언어결과실행 시간메모리
1139768nguyenkhangninh99Valley (BOI19_valley)C++20
100 / 100
190 ms67084 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> #define fi first #define se second const int maxn = 1e5 + 10; int a[maxn], h[maxn], tin[maxn], out[maxn], sz[maxn]; bool check[maxn]; pair<int, pair<int, int>> edge[maxn]; vector<pair<int, int>> g[maxn]; int timeDfs = 0; struct Node { int len, mn, par; } f[maxn][20]; void dfs(int u, int p){ tin[u] = ++timeDfs; if (check[u]) sz[u] = 1; else f[u][0].mn = 1e18; for (auto [v, w]: g[u]){ if (v == p) continue; h[v] = h[u] + 1; f[v][0].par = u; f[v][0].len = w; dfs(v, u); sz[u] += sz[v]; f[u][0].mn = min(f[u][0].mn, f[v][0].mn + w); } out[u] = timeDfs; } void solve(){ int n, s, q, root; cin >> n >> s >> q >> root; for(int i = 1; i <= n - 1; i++){ int u, v, w; cin >> u >> v >> w; edge[i] = {u, {v, w}}; g[u].push_back({v, w}); g[v].push_back({u, w}); } for(int i = 1; i <= s; i++){ cin >> a[i]; check[a[i]] = true; } dfs(root, -1); for(int j = 1; j <= 19; j++){ for(int i = 1; i <= n; i++){ f[i][j].par = f[f[i][j - 1].par][j - 1].par; f[i][j].len = f[i][j - 1].len + f[f[i][j - 1].par][j - 1].len; f[i][j].mn = min(f[i][j - 1].mn, f[f[i][j - 1].par][j - 1].mn + f[i][j - 1].len); } } while (q--){ int id, r; cin >> id >> r; int u = edge[id].fi, v = edge[id].se.fi; if (h[u] > h[v]) swap(u, v); if (tin[v] <= tin[r] && out[r] <= out[v]){ if (!sz[v]) cout << "oo" << "\n"; else { int len = 0, ans = 1e18; for(int i = log2(n); i >= 0; i--){ if (h[f[r][i].par] >= h[v]){ ans = min(ans, f[r][i].mn + len); len += f[r][i].len; r = f[r][i].par; } } cout << min(ans, f[r][0].mn + len) << "\n"; } } else cout << "escaped\n"; } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...