//In the name of GOD***---...---***---...---***---...
/*/=======================================
Diversity in counsel, unity in command
__
Success always calls for greater generosity - though
most people, lost in the darkness of their own egos,
treat it as an occasion for greater greed.
Collecting boot is not an end itself, but only a means for
building an empire. Riches would be of little use to us now
except as a means of winning new friends.
__*By Cyrus the great*__
=======================================/*/
#include<bits/stdc++.h>
using namespace std;
////========== Defines ==============////
#define IOS ios_base::sync_with_stdio(0);\
cin.tie(0);\
cout.tie(0);
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define fixed(a) fixed<<setprecision(a)
////=============== Typedefs ==============////
typedef long long int lli;
typedef pair<lli,lli> pii;
////=============== CONSTANT ===============////
const lli mx = (1e3+100), inf = (1<<30);
////============== Global types ============////
lli n, s, q, e;
vector<pii> adj[mx];
lli dis[mx], st[mx];
pii ed[mx];
lli mini =inf;
lli POS, ban1, ban2;
bool check;
////========== User Define Functions ==========////
void dfs(lli p, lli v, int wi){
dis[v] = dis[p] + wi;
if(v == e) mini = -1;
if(v == POS) check =1;
if(st[v] == 1) mini = min(mini, dis[v]);
for(auto u : adj[v]){
if(u.F == p) continue;
if(u.F == ban1 && v == ban2) continue;
if(v == ban1 && u.F == ban2) continue;
dfs(v, u.F, u.S);
}
}
void solve(lli pos){
POS = pos;
if(n == s){
dfs(0, e);
if(check) cout << "escaped\n";
else cout << 0 << '\n';
}
else{
dfs(0, POS, 0);
if(mini == inf) cout << "oo\n";
else{
if(mini == -1) cout << "escaped\n";
else cout << mini << '\n';
}
// }
}
////================= Notes =================////
/*
*/
////============ End of Templates ============////
int main() {
IOS
cin >> n >> s >> q >> e;
for(lli i =1; i < n; i++){
lli x, y, w;
cin >> x >> y >> w;
adj[x].pb(mp(y, w));
adj[y].pb(mp(x, w));
ed[i] = mp(x, y);
}
for(lli i =0; i < s; i++){
lli x;
cin >> x;
st[x] =1;
}
while(q--){
lli ban, pOs;
cin >> ban >> pOs;
ban1 = ed[ban].F;
ban2 = ed[ban].S;
mini =inf;
memset(dis, 0, sizeof dis);
solve(pOs);
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
return 0;
}
//Hewwo OwO
Compilation message
magictree.cpp: In function 'void solve(lli)':
magictree.cpp:59:11: error: too few arguments to function 'void dfs(lli, lli, int)'
59 | dfs(0, e);
| ^
magictree.cpp:44:6: note: declared here
44 | void dfs(lli p, lli v, int wi){
| ^~~
magictree.cpp:77:12: error: a function-definition is not allowed here before '{' token
77 | int main() {
| ^
magictree.cpp:104:1: error: expected '}' at end of input
104 | }
| ^
magictree.cpp:56:20: note: to match this '{'
56 | void solve(lli pos){
| ^