This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <sstream>
#include <cstring>
#include <bitset>
// #pragma GCC optimize("inline")
// #pragma GCC optimize("-fgcse,-fgcse-lm")
// #pragma GCC optimize("-ftree-pre,-ftree-vrp")
// #pragma GCC optimize("-ffast-math")
// #pragma GCC optimize("-fipa-sra")
// #pragma GCC optimize("-fpeephole2")
// #pragma GCC optimize("-fsched-spec")
// #pragma GCC optimize("Ofast,no-stack-protector")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
// #pragma GCC optimize("unroll-loops")
#define ll long long int
#define pb push_back
#define pll pair < ll , ll >
#define fi first
#define se second
#define all(x) x.begin(), x.end()
using namespace std;
// struct graphs{
// ll e, w, id;
// };
ll inf2 = 3e18;
ll ans, n, s, q, e;
vector < pll > g[ 100111 ];
vector < ll > markets;
map < pll , ll > mp;
int main (){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// ll n, s, q, e;
cin >> n >> s >> q >> e;
for(int i = 1; i < n; i ++){
ll u, v, w;
cin >> u >> v >> w;
g[ u ].pb(make_pair(v, w));
g[ v ].pb(make_pair(u, w));
mp[ make_pair(max(u, v), min(u, v)) ] = i;
}
for(int i = 1; i <= s; i ++){
ll id;
cin >> id;
markets.pb(id);
}
while(q --){
ll ch = 0, k, r;
cin >> k >> r;
vector < ll > dis(n + 1, inf2), parent(n + 1);
dis[ r ] = 0;
set < pll > q;
q.insert(make_pair(dis[ r ], r));
while(!q.empty()){
ll v = q.begin()->second;
q.erase(q.begin());
if(v == e){
cout << "escaped\n";
ch ++;
break;
}
for(int j = 0; j < g[ v ].size(); j ++){
ll to = g[ v ][ j ].fi;
ll len = g[ v ][ j ].se;
if(dis[ v ] + len < dis[ to ] && mp[ make_pair(max(to, v), min(to, v)) ] != k){
q.erase(make_pair(dis[ to ], to));
dis[ to ] = dis[ v ] + len;
parent[ to ] = v;
q.insert(make_pair(dis[ to ], to));
}
}
}
if(!ch){
ll ans = inf2;
for(auto it : markets){
ans = min(ans, ((ll)dis[ it ]));
}
if(ans != inf2){
cout << ans << "\n";
}else
cout << "oo\n";
}
}
}
/*
5 2 3 1
1 2 3
1 3 2
3 4 1
3 5 2
2
4
2 2
2 5
4 5
*/
Compilation message (stderr)
valley.cpp: In function 'int main()':
valley.cpp:89:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
89 | for(int j = 0; j < g[ v ].size(); j ++){
| ~~^~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |