Submission #1245607

#TimeUsernameProblemLanguageResultExecution timeMemory
1245607corvusValley (BOI19_valley)C++20
23 / 100
250 ms31804 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define ll long long #define all(x) (x).begin(), (x).end() const int N = 2e5 + 100 , LOG = 21; vector <vector <pair <int , int>>> edj; map <pair <int , int> , int> idx; int anc[N][LOG]; vector <int> lvl; int n , s , Q , e ; void dfs(int node , int par) { anc[node][0] = par; for(int i = 1 ; i < LOG ; i ++) { if(anc[node][i - 1] > n) continue; anc[node][i] = anc[anc[node][i - 1]][i - 1]; } for(auto [w , to] : edj[node]) if(par != to) lvl[to] = lvl[node] + 1 , dfs(to , node); } int Kth(int node , int k) { for(int i = 0 ; i < LOG ; i ++) { if((k >> i) & 1) node = anc[node][i]; } return node; } int LCA(int u , int v) { if(lvl[u] < lvl[v]) swap(u , v); u = Kth(u , lvl[u] - lvl[v]); if(u == v) return v; for(int i = LOG - 1 ; i >= 0 ; i --) { if(anc[u][i] != anc[v][i]) u = anc[u][i] , v = anc[v][i]; } return anc[u][0]; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> s >> Q >> e; edj = vector <vector <pair <int , int>>> (n + 1); vector <tuple <int , int , int>> vec(n - 1); lvl = vector <int>(n + 1 , {}); for(int i = 0 ; i < n - 1 ; i ++) { int u , v , w; cin >> u >> v >> w; vec[i] = {u , v , w}; idx[{u , v}] = idx[{v , u}] = i + 1; edj[u].pb({w , v}); edj[v].pb({w , u}); } dfs(e , e); vector <int> shops(s); for(int i = 0 ; i < s ; i ++) { cin >> shops[i]; } while( Q-- ) { int l , r ; cin >> l >> r; int a , b , w; tie(a , b , w) = vec[l - 1]; if(LCA(a , r) == LCA(b , r)) cout << "escaped\n"; else cout << "0\n"; // cout << a << ' ' << b << ' ' << r << ' ' << LCA(a , r) << ' ' << LCA(b , r) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...