#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;
const int N = 100'010;
vector<pii> query[N];
int lower_v[N];
vector<pii> A[N];
ll w[N];
double near_m_height_st[N];
double near_child[N];
double height[N];
int st[N], ft[N];
bool has_shop[N];
ll ans[N];
int n, q, cnt_shops, rt;
void dfs1(int v, int p, int &t, double h)
{
st[v] = t++;
height[v] = h;
for (auto [u, e] : A[v]) {
if (u == p)
continue;
lower_v[e] = u;
dfs1(u, v, t, h + w[e]);
}
ft[v] = t;
}
__attribute__((optimize("O3,unroll-loops"),target("avx")))
void update(int l, int r, double x)
{
Loop (i,l,r) {
near_m_height_st[i] = near_m_height_st[i] < x?
near_m_height_st[i]: x;
}
}
void up_near(int v, int p)
{
near_child[v] = has_shop[v]? 0: 1e100;
for (auto [u, e] : A[v]) {
if (u == p)
continue;
near_child[v] = min(near_child[v], near_child[u] + w[e]);
}
update(st[v], ft[v], near_child[v] - height[v]);
}
void ans_queries(int v)
{
for (auto [i, u] : query[v]) {
if (st[u] < st[v] || ft[v] <= st[u])
ans[i] = -2;
else if (near_m_height_st[st[u]] > 1e20)
ans[i] = -1;
else
ans[i] = near_m_height_st[st[u]] + height[u];
}
}
void dfs2(int v, int p)
{
for (auto [u, e] : A[v]) {
if (u != p)
dfs2(u, v);
}
up_near(v, p);
ans_queries(v);
}
int main()
{
cin.tie(0) -> sync_with_stdio(false);
cin >> n >> cnt_shops >> q >> rt; --rt;
Loop (i,0,n-1) {
int v, u;
cin >> v >> u >> w[i];
--v; --u;
A[v].push_back({u, i});
A[u].push_back({v, i});
}
dfs1(rt, -1, *new int(0), 0);
Loop (i,0,cnt_shops) {
int v;
cin >> v;
has_shop[v-1] = 1;
}
Loop (i,0,q) {
int e, v;
cin >> e >> v;
--e; --v;
query[lower_v[e]].push_back({i, v});
}
fill(near_m_height_st, near_m_height_st+N, 1e100);
dfs2(rt, -1);
Loop (i,0,q) {
switch (ans[i]) {
case -2: cout << "escaped\n"; break;
case -1: cout << "oo\n"; break;
default: cout << ans[i] << '\n'; break;
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
6100 KB |
Output is correct |
2 |
Correct |
5 ms |
6100 KB |
Output is correct |
3 |
Correct |
5 ms |
6188 KB |
Output is correct |
4 |
Correct |
5 ms |
6168 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
6100 KB |
Output is correct |
2 |
Correct |
5 ms |
6100 KB |
Output is correct |
3 |
Correct |
5 ms |
6188 KB |
Output is correct |
4 |
Correct |
5 ms |
6168 KB |
Output is correct |
5 |
Correct |
4 ms |
5984 KB |
Output is correct |
6 |
Correct |
4 ms |
5856 KB |
Output is correct |
7 |
Correct |
4 ms |
5936 KB |
Output is correct |
8 |
Correct |
6 ms |
5972 KB |
Output is correct |
9 |
Correct |
4 ms |
5856 KB |
Output is correct |
10 |
Correct |
5 ms |
5932 KB |
Output is correct |
11 |
Correct |
4 ms |
5972 KB |
Output is correct |
12 |
Correct |
4 ms |
5936 KB |
Output is correct |
13 |
Correct |
4 ms |
5972 KB |
Output is correct |
14 |
Correct |
4 ms |
5940 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
116 ms |
18892 KB |
Output is correct |
2 |
Correct |
126 ms |
18496 KB |
Output is correct |
3 |
Correct |
157 ms |
18480 KB |
Output is correct |
4 |
Correct |
311 ms |
20268 KB |
Output is correct |
5 |
Correct |
329 ms |
19860 KB |
Output is correct |
6 |
Correct |
867 ms |
21580 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
6100 KB |
Output is correct |
2 |
Correct |
5 ms |
6100 KB |
Output is correct |
3 |
Correct |
5 ms |
6188 KB |
Output is correct |
4 |
Correct |
5 ms |
6168 KB |
Output is correct |
5 |
Correct |
4 ms |
5984 KB |
Output is correct |
6 |
Correct |
4 ms |
5856 KB |
Output is correct |
7 |
Correct |
4 ms |
5936 KB |
Output is correct |
8 |
Correct |
6 ms |
5972 KB |
Output is correct |
9 |
Correct |
4 ms |
5856 KB |
Output is correct |
10 |
Correct |
5 ms |
5932 KB |
Output is correct |
11 |
Correct |
4 ms |
5972 KB |
Output is correct |
12 |
Correct |
4 ms |
5936 KB |
Output is correct |
13 |
Correct |
4 ms |
5972 KB |
Output is correct |
14 |
Correct |
4 ms |
5940 KB |
Output is correct |
15 |
Correct |
116 ms |
18892 KB |
Output is correct |
16 |
Correct |
126 ms |
18496 KB |
Output is correct |
17 |
Correct |
157 ms |
18480 KB |
Output is correct |
18 |
Correct |
311 ms |
20268 KB |
Output is correct |
19 |
Correct |
329 ms |
19860 KB |
Output is correct |
20 |
Correct |
867 ms |
21580 KB |
Output is correct |
21 |
Correct |
108 ms |
20080 KB |
Output is correct |
22 |
Correct |
115 ms |
19736 KB |
Output is correct |
23 |
Correct |
122 ms |
19660 KB |
Output is correct |
24 |
Correct |
382 ms |
21684 KB |
Output is correct |
25 |
Correct |
795 ms |
23892 KB |
Output is correct |
26 |
Correct |
127 ms |
20176 KB |
Output is correct |
27 |
Correct |
125 ms |
19840 KB |
Output is correct |
28 |
Correct |
128 ms |
19840 KB |
Output is correct |
29 |
Correct |
369 ms |
21124 KB |
Output is correct |
30 |
Correct |
669 ms |
21848 KB |
Output is correct |
31 |
Correct |
119 ms |
20188 KB |
Output is correct |
32 |
Correct |
117 ms |
19876 KB |
Output is correct |
33 |
Correct |
145 ms |
19976 KB |
Output is correct |
34 |
Correct |
681 ms |
21624 KB |
Output is correct |
35 |
Correct |
771 ms |
23820 KB |
Output is correct |
36 |
Correct |
785 ms |
21704 KB |
Output is correct |