Guest User

a.cpp

a guest
Dec 13th, 2025
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define f first
  4. #define s second
  5. #define pb push_back
  6.  
  7. using namespace std;
  8. const int MAXN = 1e6 + 10;
  9. const int INF = 1e9 + 7;
  10. bool was[MAXN];
  11. vector <int> g[MAXN];
  12. int up[MAXN][23];
  13. int tin[MAXN], tout[MAXN], l;
  14. bool upper(int a, int b){
  15.     return (tin[a] <= tin[b] && tout[a] >= tout[b]);
  16. }
  17.  
  18. int timer = 0;
  19. void dfs(int x, int p = 0){
  20.     was[x] = 1;
  21.     tin[x] = ++timer;
  22.     up[x][0] = p;
  23.     for (int i = 1; i <= l; i++){
  24.         up[x][i] = up[up[x][i - 1]][i - 1];
  25.     }
  26.  
  27.     for (int i = 0; i < g[x].size(); i++){
  28.         int to = g[x][i];
  29.         if (!was[to]){
  30.             dfs(to, x);
  31.         }
  32.     }
  33.     tout[x] = ++timer;
  34. }
  35.  
  36. int lca(int a, int b){
  37.     if (upper(a, b))
  38.         return a;
  39.     if (upper(b, a))
  40.         return b;
  41.  
  42.     for (int i = l; i >= 0; i--){
  43.         if (!upper(up[a][i], b))
  44.             a = up[a][i];
  45.     }
  46.  
  47.     return up[a][0];
  48. }
  49.  
  50. void solve(){
  51.     tout[0] = INF;
  52.  
  53.     int q;
  54.     cin >> q;
  55.     pair <string, pair <int, int> > a[q + 1];
  56.     for (int i = 0; i < q; i++){
  57.         cin >> a[i].f >> a[i].s.f >> a[i].s.s;
  58.         if (a[i].f == "ADD"){
  59.             g[a[i].s.f].push_back(a[i].s.s);
  60.         }
  61.     }
  62.     l = 0;
  63.     while ((1 << l) < MAXN){
  64.         l++;
  65.     }
  66.  
  67.     dfs(1);
  68.     for (int i = 0; i < q; i++){
  69.         if (a[i].f == "GET"){
  70.             cout << lca(a[i].s.f, a[i].s.s) << '\n';
  71.         }
  72.     }
  73. }
  74.  
  75. int main() {
  76.  
  77.     ios::sync_with_stdio(0);
  78.     cin.tie(nullptr);
  79.     cout.tie(nullptr);
  80.  
  81.     int ttt = 1;
  82.     //cin >> ttt;
  83.  
  84.     while (ttt--){
  85.         solve();
  86.     }
  87.     return 0;
  88. }
  89.  
  90.  
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment