Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. #include <iomanip>
  6. #include <stack>
  7. #include <queue>
  8. #include <string>
  9. #include <cmath>
  10. #include <map>
  11. #include <cstdlib>
  12. #include <unordered_set>
  13. #include <unordered_map>
  14. #include <random>
  15. #include <chrono>
  16.  
  17. using namespace std;
  18.  
  19. #define pb push_back
  20. #define f first
  21. #define s second
  22. #define mp make_pair
  23. #define pii pair <int, int>
  24.  
  25. typedef long long ll;
  26. typedef long double ld;
  27. typedef vector <int> vi;
  28.  
  29. const int MAXN = 1e6 + 10;
  30. ll INF = 1e9 + 10;
  31. ll MOD = 1e9 + 7;
  32.  
  33. int q;
  34. int par[MAXN], d[MAXN], up[MAXN][20];
  35.  
  36.  
  37. void add(int a, int b){
  38. d[b] = d[a] + 1;
  39. par[b] = a;
  40. for(int i = 0; i < 20; i++){
  41. i == 0 ? up[b][i] = par[b] : up[b][i] = up[up[b][i - 1]][i - 1];
  42. }
  43. }
  44.  
  45. int get(int a, int b){
  46. if(d[a] > d[b])
  47. swap(a, b);
  48. int dif = d[b] - d[a];
  49. for(int i = 0; i < 20; i++){
  50. if((dif >> i) & 1)
  51. b = up[b][i];
  52. }
  53. if(a == b)
  54. return a;
  55. for(int i = 19; i >= 0; i--){
  56. if(up[a][i] != up[b][i]){
  57. a = up[a][i];
  58. b = up[b][i];
  59. }
  60. }
  61. return par[a];
  62. }
  63.  
  64. int main() {
  65. ios_base::sync_with_stdio(0);
  66. cin.tie(0);
  67. cout.tie(0);
  68. freopen("lca.in", "r", stdin);
  69. freopen("lca.out", "w", stdout);
  70. cin >> q;
  71. while(q--){
  72. string s;
  73. int a, b;
  74. cin >> s >> a >> b;
  75. if(s == "ADD"){
  76. add(a - 1, b - 1);
  77. }
  78. else{
  79. cout << get(a - 1, b - 1) + 1 << '\n';
  80. }
  81. }
  82.  
  83.  
  84.  
  85.  
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement