# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
204348 | 2020-02-25T13:20:52 Z | quocnguyen1012 | Valley (BOI19_valley) | C++14 | 283 ms | 41208 KB |
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; const int maxn = 1e5 + 5; const ll llinf = 1e17; int U[maxn], V[maxn], W[maxn]; vector<int> adj[maxn]; int N, Q, S, E; bool mark[maxn]; int tin[maxn], tout[maxn]; ll dist[maxn], rmq[maxn][20], D[maxn]; int par[maxn][20], depth[maxn]; void precalc(int u, int p = -1) { static int nTime = 0; tin[u] = ++nTime; for (int i = 1; (1 << i) <= N; ++i) par[u][i] = par[par[u][i - 1]][i - 1]; D[u] = llinf; if (mark[u]) D[u] = dist[u]; for (int i : adj[u]){ int v = U[i] + V[i] - u; int w = W[i]; if (v == p) continue; dist[v] = dist[u] + w; depth[v] = depth[u] + 1; par[v][0] = u; precalc(v, u); D[u] = min(D[u], D[v]); } tout[u] = nTime; if (D[u] != llinf) rmq[u][0] = D[u] - 2 * dist[u]; else rmq[u][0] = llinf; } bool in(int u, int v) { return tin[u] <= tin[v] && tout[v] <= tout[u]; } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen("A.INP", "r")){ freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); } cin >> N >> S >> Q >> E; for (int i = 1; i < N; ++i){ cin >> U[i] >> V[i] >> W[i]; adj[U[i]].pb(i); adj[V[i]].pb(i); } for (int i = 1; i <= S; ++i){ int x; cin >> x; mark[x] = true; } depth[E] = 1; precalc(E); for (int i = 1; i < N; ++i){ if (tin[V[i]] < tin[U[i]]) swap(U[i], V[i]); } for (int j = 1; (1 << j) <= N; ++j){ for (int i = 1; i <= N; ++i){ rmq[i][j] = min(rmq[i][j - 1], rmq[par[i][j - 1]][j - 1]); } } while (Q--){ int idx, x; cin >> idx >> x; if (!in(V[idx], x)){ cout << "escaped\n"; continue; } ll now = dist[x], res = rmq[V[idx]][0] + dist[x]; //cerr << V[idx] << '\n'; for (int k = 19; k >= 0; --k){ if (depth[par[x][k]] >= depth[V[idx]]){ res = min(res, now + rmq[x][k]); x = par[x][k]; } } if (res >= llinf) cout << "oo\n"; else cout << res << '\n'; } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 2808 KB | Output is correct |
2 | Correct | 9 ms | 2936 KB | Output is correct |
3 | Correct | 9 ms | 2936 KB | Output is correct |
4 | Correct | 9 ms | 2936 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 2808 KB | Output is correct |
2 | Correct | 9 ms | 2936 KB | Output is correct |
3 | Correct | 9 ms | 2936 KB | Output is correct |
4 | Correct | 9 ms | 2936 KB | Output is correct |
5 | Correct | 7 ms | 3064 KB | Output is correct |
6 | Correct | 8 ms | 3192 KB | Output is correct |
7 | Correct | 7 ms | 3064 KB | Output is correct |
8 | Correct | 7 ms | 3064 KB | Output is correct |
9 | Correct | 7 ms | 3064 KB | Output is correct |
10 | Correct | 7 ms | 3064 KB | Output is correct |
11 | Correct | 7 ms | 3064 KB | Output is correct |
12 | Correct | 7 ms | 3064 KB | Output is correct |
13 | Correct | 7 ms | 3064 KB | Output is correct |
14 | Correct | 7 ms | 3064 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 208 ms | 34332 KB | Output is correct |
2 | Correct | 223 ms | 37756 KB | Output is correct |
3 | Correct | 238 ms | 37752 KB | Output is correct |
4 | Correct | 264 ms | 39292 KB | Output is correct |
5 | Correct | 237 ms | 39416 KB | Output is correct |
6 | Correct | 283 ms | 40952 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 2808 KB | Output is correct |
2 | Correct | 9 ms | 2936 KB | Output is correct |
3 | Correct | 9 ms | 2936 KB | Output is correct |
4 | Correct | 9 ms | 2936 KB | Output is correct |
5 | Correct | 7 ms | 3064 KB | Output is correct |
6 | Correct | 8 ms | 3192 KB | Output is correct |
7 | Correct | 7 ms | 3064 KB | Output is correct |
8 | Correct | 7 ms | 3064 KB | Output is correct |
9 | Correct | 7 ms | 3064 KB | Output is correct |
10 | Correct | 7 ms | 3064 KB | Output is correct |
11 | Correct | 7 ms | 3064 KB | Output is correct |
12 | Correct | 7 ms | 3064 KB | Output is correct |
13 | Correct | 7 ms | 3064 KB | Output is correct |
14 | Correct | 7 ms | 3064 KB | Output is correct |
15 | Correct | 208 ms | 34332 KB | Output is correct |
16 | Correct | 223 ms | 37756 KB | Output is correct |
17 | Correct | 238 ms | 37752 KB | Output is correct |
18 | Correct | 264 ms | 39292 KB | Output is correct |
19 | Correct | 237 ms | 39416 KB | Output is correct |
20 | Correct | 283 ms | 40952 KB | Output is correct |
21 | Correct | 198 ms | 37496 KB | Output is correct |
22 | Correct | 209 ms | 37092 KB | Output is correct |
23 | Correct | 220 ms | 37240 KB | Output is correct |
24 | Correct | 241 ms | 38776 KB | Output is correct |
25 | Correct | 260 ms | 41208 KB | Output is correct |
26 | Correct | 189 ms | 37624 KB | Output is correct |
27 | Correct | 202 ms | 37240 KB | Output is correct |
28 | Correct | 225 ms | 37244 KB | Output is correct |
29 | Correct | 248 ms | 38520 KB | Output is correct |
30 | Correct | 269 ms | 39800 KB | Output is correct |
31 | Correct | 215 ms | 37704 KB | Output is correct |
32 | Correct | 207 ms | 37372 KB | Output is correct |
33 | Correct | 218 ms | 37500 KB | Output is correct |
34 | Correct | 262 ms | 38776 KB | Output is correct |
35 | Correct | 254 ms | 41208 KB | Output is correct |
36 | Correct | 227 ms | 38776 KB | Output is correct |