제출 #1350696

#제출 시각아이디문제언어결과실행 시간메모리
1350696hyyhValley (BOI19_valley)C++20
23 / 100
152 ms11428 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>

using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)

int const N = 2e5+10;

vector<pii> adj[N];

int intime[N];
int outtime[N];

int t = 0;

void dfs(int n,int p){
    intime[n] = t++;
    for(auto [k,w]:adj[n]){
        if(k != p) dfs(k,n);
    }
    outtime[n] = t;
}

int main(){
    int n;cin >> n;
    int S;cin >> S;
    int q;cin >> q;
    int e;cin >> e;
    vector<pii> edge;
    for(int i{};i < n-1;i++){
        int a,b,c;cin >> a >> b >> c;
        adj[a].emplace_back(b,c);
        adj[b].emplace_back(a,c);
        edge.emplace_back(a,b);
    }
    dfs(e,-1);
    vector<int> shop;
    for(int i{};i < S;i++){
        int g;cin >> g;
        shop.emplace_back(g);
    }
    for(int i{};i < q;i++){
        int cut,pos;cin >> cut >> pos;
        auto [a,b] = edge[cut-1];
        int subtree;
        if(intime[a] > intime[b]) subtree = a;
        else subtree = b;
        if(intime[pos] >= intime[subtree] && outtime[pos] <= outtime[subtree]){
            cout << 0;
        }
        else cout << "escaped";
        cout << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...