# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
340680 |
2020-12-28T06:46:28 Z |
8e7 |
Valley (BOI19_valley) |
C++14 |
|
1970 ms |
46116 KB |
//Challenge: Accepted
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
#define maxn 100005
#define ll long long
#define ff first
#define ss second
using namespace std;
const ll inf = 1LL<<60;
vector<pair<int, ll> > adj[maxn];
bool st[maxn];
int lef[maxn], rig[maxn], anc[17][maxn];
ll mind[17][maxn];
struct edge {
int a, b;
ll w;
edge(int x, int y, ll c) {
a = x, b = y, w = c;
}
edge() {
a = 0, b = 0, w = 0;
}
};
edge ed[maxn];
ll dep[maxn], d2[maxn], seg[4 * maxn];
void init(int cur, int l, int r) {
if (r <= l) return;
if (r - l == 1) {
seg[cur] = dep[l];
return;
}
int mid = (l + r) / 2;
init(cur * 2, l, mid), init(cur * 2 + 1, mid, r);
seg[cur] = min(seg[cur * 2], seg[cur * 2 + 1]);
}
ll query(int cur, int l, int r, int ql, int qr) {
if (r <= l || qr <= l || ql >= r) return inf;
if (ql <= l && qr >= r) return seg[cur];
int mid = (l + r) / 2;
return min(query(cur * 2, l, mid, ql, qr), query(cur * 2 + 1, mid, r, ql, qr));
}
int cnt = 0;
void dfs(int n, int par, ll dis) {
lef[n] = cnt;
dep[cnt] = (st[n] ? dis : inf), d2[n] = dis;
anc[0][n] = par;
cnt++;
for (auto v: adj[n]) {
if (v.ff != par) {
dfs(v.ff, n, dis + v.ss);
}
}
rig[n] = cnt; //[l, r)
}
int main() {
for (int i = 0;i < maxn;i++) mind[0][i] = inf;
int n, s, q, e;
cin >> n >> s >> q >> e;
for (int i = 1;i <= n - 1;i++) {
int a, b;
ll w;
cin >> a >> b >> w;
ed[i] = edge(a, b, w);
adj[a].push_back(make_pair(b, w));
adj[b].push_back(make_pair(a, w));
}
for (int i = 0;i < s;i++) {
int x;
cin >> x;
st[x] = 1;
}
dfs(e, 0, 1);
for (int i = 1;i <= n;i++) cerr << lef[i] << " " << d2[i] << endl;
init(1, 0, n);
for (int i = 1;i <= n;i++) mind[0][i] = query(1, 0, n, lef[i], rig[i]) - 2 * d2[i], cerr << mind[0][i] << endl;
for (int i = 1;i < 17;i++) {
for (int j = 1;j <= n;j++) {
anc[i][j] = anc[i - 1][anc[i - 1][j]];
mind[i][j] = min(mind[i - 1][j], mind[i - 1][anc[i - 1][j]]);
}
}
while (q--) {
int ind, r, sub;
cin >> ind >> r;
if (anc[0][ed[ind].a] == ed[ind].b) sub = ed[ind].a;
else sub = ed[ind].b;
if (lef[r] >= lef[sub] && lef[r] < rig[sub]) {
ll ans = inf;
int cur = r;
for (int j = 16;j >= 0;j--) {
if (d2[anc[j][cur]] >= d2[sub]) {
//cout << j << " " << cur << endl;
ans = min(ans, d2[r] + mind[j][cur]);
cur = anc[j][cur];
}
}
ans = min(ans, d2[r] + mind[0][sub]);
if (ans >= (inf>>1)) cout << "oo" << "\n";
else cout << ans << "\n";
} else {
cout << "escaped\n";
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
32 ms |
5356 KB |
Output is correct |
2 |
Correct |
33 ms |
5484 KB |
Output is correct |
3 |
Correct |
32 ms |
5356 KB |
Output is correct |
4 |
Correct |
32 ms |
5356 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
32 ms |
5356 KB |
Output is correct |
2 |
Correct |
33 ms |
5484 KB |
Output is correct |
3 |
Correct |
32 ms |
5356 KB |
Output is correct |
4 |
Correct |
32 ms |
5356 KB |
Output is correct |
5 |
Correct |
20 ms |
5612 KB |
Output is correct |
6 |
Correct |
21 ms |
5632 KB |
Output is correct |
7 |
Correct |
21 ms |
5624 KB |
Output is correct |
8 |
Correct |
21 ms |
5612 KB |
Output is correct |
9 |
Correct |
21 ms |
5612 KB |
Output is correct |
10 |
Correct |
21 ms |
5612 KB |
Output is correct |
11 |
Correct |
21 ms |
5612 KB |
Output is correct |
12 |
Correct |
21 ms |
5612 KB |
Output is correct |
13 |
Correct |
23 ms |
5612 KB |
Output is correct |
14 |
Correct |
21 ms |
5612 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1872 ms |
41256 KB |
Output is correct |
2 |
Correct |
1874 ms |
41196 KB |
Output is correct |
3 |
Correct |
1917 ms |
41620 KB |
Output is correct |
4 |
Correct |
1917 ms |
43372 KB |
Output is correct |
5 |
Correct |
1890 ms |
43892 KB |
Output is correct |
6 |
Correct |
1970 ms |
45420 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
32 ms |
5356 KB |
Output is correct |
2 |
Correct |
33 ms |
5484 KB |
Output is correct |
3 |
Correct |
32 ms |
5356 KB |
Output is correct |
4 |
Correct |
32 ms |
5356 KB |
Output is correct |
5 |
Correct |
20 ms |
5612 KB |
Output is correct |
6 |
Correct |
21 ms |
5632 KB |
Output is correct |
7 |
Correct |
21 ms |
5624 KB |
Output is correct |
8 |
Correct |
21 ms |
5612 KB |
Output is correct |
9 |
Correct |
21 ms |
5612 KB |
Output is correct |
10 |
Correct |
21 ms |
5612 KB |
Output is correct |
11 |
Correct |
21 ms |
5612 KB |
Output is correct |
12 |
Correct |
21 ms |
5612 KB |
Output is correct |
13 |
Correct |
23 ms |
5612 KB |
Output is correct |
14 |
Correct |
21 ms |
5612 KB |
Output is correct |
15 |
Correct |
1872 ms |
41256 KB |
Output is correct |
16 |
Correct |
1874 ms |
41196 KB |
Output is correct |
17 |
Correct |
1917 ms |
41620 KB |
Output is correct |
18 |
Correct |
1917 ms |
43372 KB |
Output is correct |
19 |
Correct |
1890 ms |
43892 KB |
Output is correct |
20 |
Correct |
1970 ms |
45420 KB |
Output is correct |
21 |
Correct |
1853 ms |
41580 KB |
Output is correct |
22 |
Correct |
1886 ms |
41324 KB |
Output is correct |
23 |
Correct |
1865 ms |
41708 KB |
Output is correct |
24 |
Correct |
1898 ms |
43500 KB |
Output is correct |
25 |
Correct |
1898 ms |
46116 KB |
Output is correct |
26 |
Correct |
1851 ms |
41608 KB |
Output is correct |
27 |
Correct |
1871 ms |
41480 KB |
Output is correct |
28 |
Correct |
1912 ms |
41676 KB |
Output is correct |
29 |
Correct |
1903 ms |
42956 KB |
Output is correct |
30 |
Correct |
1908 ms |
44140 KB |
Output is correct |
31 |
Correct |
1842 ms |
41708 KB |
Output is correct |
32 |
Correct |
1852 ms |
41452 KB |
Output is correct |
33 |
Correct |
1885 ms |
41964 KB |
Output is correct |
34 |
Correct |
1931 ms |
43372 KB |
Output is correct |
35 |
Correct |
1901 ms |
45676 KB |
Output is correct |
36 |
Correct |
1868 ms |
42440 KB |
Output is correct |