# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
496302 |
2021-12-21T05:16:36 Z |
vinnipuh01 |
Valley (BOI19_valley) |
C++17 |
|
3000 ms |
34484 KB |
#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
#include <algorithm>
#include <vector>
#include <deque>
#include <set>
#include <stack>
#include <string>
#include <map>
#include <queue>
#define int long long
using namespace std;
const long long oo = 1000000000000000000;
long long sum, ans = 0, mx = 0, mn = 1000000000, num, pos;
/*
ViHHiPuh
(( `'-""``""-'` ))
)-__-_.._-__-(
/ --- (o _ o) --- \
\ .-* ( .0. ) *-. /
_'-. ,_ '=' _, .-'_
/ `;#'#'# - #'#'#;` \
\_)) -----'#'----- ((_/
# --------- #
'# ------- ------ #'
/..-'# ------- #'-.\
_\...-\'# -- #'/-.../_
((____)- '#' -(____))
cout << fixed << setprecision(6) << x;
freopen ( "sum.in", "r", stdin )
*/
int n, m, q, st, par[ 100001 ][ 21 ], lg = 20, d[ 100001 ], prr[ 100001 ];
vector <pair<int, int> > v[ 100001 ];
queue <int> vv;
int tmr, tin[ 100001 ], tout[ 100001 ], col[ 100001 ];
pair <int, int> e[ 100001 ];
void dfs( int u, int pr ) {
par[ u ][ 0 ] = pr;
tin[ u ] = ++tmr;
for ( int i = 1; i <= lg; i ++ )
par[ u ][ i ] = par[ par[ u ][ i - 1 ] ][ i - 1 ];
for ( auto to : v[ u ] ) {
if ( to.first != pr ) {
prr[ to.first ] = to.second;
d[ to.first ] = d[ u ] + to.second;
dfs( to.first, u );
}
}
tout[ u ] = tmr;
}
bool ok( int a, int b ) {
return ( tin[ a] <= tin[ b ] && tout[ a ] >= tout[ b ] );
}
int lca( int a, int b ) {
if ( ok( a, b ) )
return a;
if ( ok( b, a ) )
return b;
for ( int i = lg; i >= 0; i -- ) {
if ( !ok( par[ a ][ i ], b ) )
a = par[ a ][ i ];
}
return par[ a ][ 0 ];
}
int gett( int a, int b ) {
mn = oo;
while ( !ok( a, b ) ) {
mn = min( mn, col[ a ] + d[ pos ] - d[ a ] + 0ll );
a = par[ a ][ 0 ];
}
mn = min( mn, col[ a ] + d[ pos ] - d[ a ] + 0ll );
return mn;
}
void dfs1( int u, int pr ) {
for ( auto to : v[ u ] ) {
if ( to.first != pr ) {
if ( col[ to.first ] > col[ u ] + to.second ) {
col[ to.first ] = col[ u ] + to.second;
vv.push( to.first );
}
dfs1( to.first, u );
}
}
}
main () {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> q >> st;
int x, y, z;
for ( int i = 1; i < n; i ++ ) {
cin >> x >> y >> z;
v[ x ].push_back( { y, z } );
v[ y ].push_back( { x, z } );
e[ i ] = { x, y };
}
for ( int i = 1; i <= n; i ++ )
col[ i ] = oo;
dfs( st, st );
for ( int i = 1; i <= m; i ++ ) {
cin >> x;
col[ x ] = 0;
vv.push( x );
}
while ( vv.size() ) {
if ( col[ par[ vv.front() ][ 0 ] ] > col[ vv.front() ] + prr[ vv.front() ] ) {
col[ par[ vv.front() ][ 0 ] ] = min( col[ vv.front() ] + prr[ vv.front() ], col[ par[ vv.front() ][ 0 ] ] );
vv.push( par[ vv.front() ][ 0 ] );
}
vv.pop();
}
int l, r;
while ( q -- ) {
cin >> l >> r;
// cout << l << " " << r << " ";
sum = ans = num = 0;
if ( d[ e[ l ].first ] < d[ e[ l ].second ] ) {
num = e[ l ].first;
sum = e[ l ].second;
}
else {
num = e[ l ].second;
sum = e[ l ].first;
}
ans = lca( r, sum );
// cout << ans << " " << sum << " - ";
if ( ans != sum ) {
cout << "escaped\n";
}
else {
if ( col[ sum ] == oo ) {
cout << "oo\n";
}
else {
if ( col[ r ] > 0 ) {
pos = r;
num = gett( r, sum );
}
else
num = col[ r ];
cout << num << "\n";
}
}
}
}
/*
8 8 10 2
1 2 1
2 3 1
3 4 1
2 5 1
5 8 1
3 6 1
7 4 1
1 2 3 4 5 6 7 8
2 7
1 1
4 8
2 6
6 6
3 3
7 6
2 2
5 5
1 1
1 1
1 1
1 1
1 1
*/
Compilation message
valley.cpp:103:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
103 | main () {
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2764 KB |
Output is correct |
2 |
Correct |
4 ms |
2760 KB |
Output is correct |
3 |
Correct |
3 ms |
2764 KB |
Output is correct |
4 |
Correct |
4 ms |
2768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2764 KB |
Output is correct |
2 |
Correct |
4 ms |
2760 KB |
Output is correct |
3 |
Correct |
3 ms |
2764 KB |
Output is correct |
4 |
Correct |
4 ms |
2768 KB |
Output is correct |
5 |
Correct |
2 ms |
2892 KB |
Output is correct |
6 |
Correct |
2 ms |
2892 KB |
Output is correct |
7 |
Correct |
3 ms |
2892 KB |
Output is correct |
8 |
Correct |
2 ms |
2892 KB |
Output is correct |
9 |
Correct |
2 ms |
2892 KB |
Output is correct |
10 |
Correct |
2 ms |
2924 KB |
Output is correct |
11 |
Correct |
2 ms |
2892 KB |
Output is correct |
12 |
Correct |
3 ms |
2892 KB |
Output is correct |
13 |
Correct |
2 ms |
2892 KB |
Output is correct |
14 |
Correct |
2 ms |
2892 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
31180 KB |
Output is correct |
2 |
Correct |
163 ms |
31068 KB |
Output is correct |
3 |
Correct |
181 ms |
31220 KB |
Output is correct |
4 |
Correct |
171 ms |
32740 KB |
Output is correct |
5 |
Correct |
186 ms |
33036 KB |
Output is correct |
6 |
Correct |
181 ms |
34484 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2764 KB |
Output is correct |
2 |
Correct |
4 ms |
2760 KB |
Output is correct |
3 |
Correct |
3 ms |
2764 KB |
Output is correct |
4 |
Correct |
4 ms |
2768 KB |
Output is correct |
5 |
Correct |
2 ms |
2892 KB |
Output is correct |
6 |
Correct |
2 ms |
2892 KB |
Output is correct |
7 |
Correct |
3 ms |
2892 KB |
Output is correct |
8 |
Correct |
2 ms |
2892 KB |
Output is correct |
9 |
Correct |
2 ms |
2892 KB |
Output is correct |
10 |
Correct |
2 ms |
2924 KB |
Output is correct |
11 |
Correct |
2 ms |
2892 KB |
Output is correct |
12 |
Correct |
3 ms |
2892 KB |
Output is correct |
13 |
Correct |
2 ms |
2892 KB |
Output is correct |
14 |
Correct |
2 ms |
2892 KB |
Output is correct |
15 |
Correct |
136 ms |
31180 KB |
Output is correct |
16 |
Correct |
163 ms |
31068 KB |
Output is correct |
17 |
Correct |
181 ms |
31220 KB |
Output is correct |
18 |
Correct |
171 ms |
32740 KB |
Output is correct |
19 |
Correct |
186 ms |
33036 KB |
Output is correct |
20 |
Correct |
181 ms |
34484 KB |
Output is correct |
21 |
Correct |
123 ms |
30404 KB |
Output is correct |
22 |
Correct |
143 ms |
30240 KB |
Output is correct |
23 |
Correct |
148 ms |
30328 KB |
Output is correct |
24 |
Correct |
662 ms |
32220 KB |
Output is correct |
25 |
Execution timed out |
3033 ms |
33696 KB |
Time limit exceeded |
26 |
Halted |
0 ms |
0 KB |
- |