제출 #898863

#제출 시각아이디문제언어결과실행 시간메모리
898863vjudge1Valley (BOI19_valley)C++17
0 / 100
171 ms14528 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int #define pb push_back #define mp make_pair #define pii pair<int, int> #define all(x) x.begin(), x.end() #define u_map unordered_map #define int ll const int maxn = 1e5 + 5, mod = 1e9 + 7, inf = 1e15; vector<pii> adj[maxn], ed; bool sh[maxn], mark[maxn], is, si; pii ban; int n, s, q, e, ans, st[maxn], fn[maxn], cnt, h[maxn]; void dfs1(int v, int par) { mark[v] = 1; h[v] = h[par] + 1; st[v] = cnt; cnt++; for (pii x: adj[v]) { int u = x.second; if (!mark[u]) { dfs1(u, par); } } fn[v] = cnt; cnt++; } void dfs(int v, int par) { mark[v] = 1; if (v == e) { is = true; } if (sh[v]) { si = true; ans = min(ans, par); } for (pii u: adj[v]) { if (!mark[u.second] and !(((ban.first == u.second and ban.second == v) or (ban.first == v and ban.second == u.second)))) { dfs(u.second, par + u.first); } } } inline void _clear() { memset(mark, 0, sizeof mark); is = false; si = false; ans = inf; } bool isin(int x, int y) { if (st[x] <= st[y] and fn[x] >= fn[y]) { return true; } return false; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> s >> q >> e; for (int i = 1; i < n; i++) { int u, v, w; cin >> u >> v >> w; adj[u].pb({w, v}); adj[v].pb({w, u}); ed.pb({u, v}); } for (int i = 1; i <= s; i++) { int x; cin >> x; sh[x] = 1; } if (s == n) { h[0] = -1; dfs1(e, 0); } while (q--) { _clear(); int l, r; cin >> l >> r; ban = {ed[l - 1].first, ed[l - 1].second}; if (s == n) { int x = ban.first, y = ban.second; if (h[y] > h[x]) { swap(x, y); } if (isin(x, r)) { cout << "0\n"; } else { cout << "escaped\n"; } continue; } dfs(r, 0); if (is) { cout << "escaped\n"; } else { if (!si) { cout << "oo\n"; } else { cout << ans << '\n'; } } } return 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...