#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define int long long
using namespace std;
const int mod = 1e9+7;
const ll inf = 1e18;
const int N = 2e5+5;
int n,s,q,e, a[N], U[N], V[N], W[N], up[N][20], timer = 0, tin[N], tout[N];
vector<int>g[N];
void dfs(int v, int p) {
tin[v] = ++timer;
up[v][0] = p;
for(int i = 1;i<20;i++) {
up[v][i] = up[up[v][i-1]][i-1];
}
for(auto to:g[v]) {
if(to == p) continue;
dfs(to,v);
}
tout[v] = timer;
}
bool check(int a, int b) {
return tin[a]<=tin[b] && tout[a]>=tout[b];
}
int lca(int a, int b) {
if(check(a,b)) return a;
if(check(b,a)) return b;
for(int k = 19;k>=0;k--) {
if(!check(up[a][k],b)) {
a = up[a][k];
}
}
return up[a][0];
}
void solve() {
cin >> n >> s >> q >> e;
vector<pair<int,int>>edjes;
for(int i = 1;i<n;i++) {
cin >> U[i] >> V[i] >> W[i];
g[U[i]].pb(V[i]);
g[V[i]].pb(U[i]);
edjes.pb({U[i],V[i]});
}
for(int i = 1;i<=s;i++) {
cin >> a[i];
}
dfs(e,e);
while(q--) {
int i, r;
cin >> i >> r;
int u = U[i], v=V[i];
if(check(v,r) == check(v,e)) {
cout << "escaped\n";
} else {
cout << "0\n";
}
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tt=1;
//cin >> tt;
while(tt--) {
solve();
}
return 0;
}
| # | 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... |