Advertisement
tien_noob

WEDDING - ĐT

Jul 4th, 2021
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. // Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "WEDDING"
  4. using namespace std;
  5. const int N = 3e4;
  6. bool Visited[N + 1];
  7. int d[N + 1], n, a, b;
  8. vector<int> Adj[N + 1];
  9. void read()
  10. {
  11.    cin >> n;
  12.    for (int i = 1; i < n; ++ i)
  13.    {
  14.        int u, v;
  15.        cin >> u >> v;
  16.        Adj[u].push_back(v);
  17.        Adj[v].push_back(u);
  18.        Visited[i] = false;
  19.    }
  20.    Visited[n] = false;
  21.    cin >> a >> b;
  22.    Visited[a] = true;
  23.    Visited[b] = true;
  24.    d[a] = d[b] = 1;
  25. }
  26. bool DFS2(int u, int k)
  27. {
  28.     if (d[u] == k)
  29.     {
  30.         return 1;
  31.     }
  32.     bool ans = false;
  33.     for (int v : Adj[u])
  34.     {
  35.         if (!Visited[v])
  36.         {
  37.             d[v] = d[u] + 1;
  38.             Visited[v] = true;
  39.             ans |= DFS2(v, k);
  40.             Visited[v] = false;
  41.         }
  42.     }
  43.     return ans;
  44. }
  45. bool DFS1(int u, int k)
  46. {
  47.     bool ans = false;
  48.     if (d[u] == k)
  49.     {
  50.         ans |= DFS2(b, k);
  51.         return ans;
  52.     }
  53.     for (int v : Adj[u])
  54.     {
  55.         if (!Visited[v])
  56.         {
  57.             d[v] = d[u] + 1;
  58.             Visited[v] = true;
  59.             ans |= DFS1(v, k);
  60.             Visited[v] = false;
  61.         }
  62.     }
  63.     return ans;
  64. }
  65. void solve()
  66. {
  67.     int low = 1, high = n;
  68.     while (low <= high)
  69.     {
  70.         int mid = (low + high)/2;
  71.         if (DFS1(a, mid))
  72.         {
  73.             low = mid + 1;
  74.         }
  75.         else
  76.         {
  77.             high = mid - 1;
  78.         }
  79.     }
  80.     cout << high;
  81. }
  82. int main()
  83. {
  84.     ios_base::sync_with_stdio(false);
  85.     cin.tie(nullptr);
  86.     freopen(TASK".INP", "r", stdin);
  87.     freopen(TASK".OUT", "w", stdout);
  88.     int t = 1;
  89.     bool typetest = false;
  90.     if (typetest)
  91.     {
  92.         cin >> t;
  93.     }
  94.     for (int __ = 1; __ <= t; ++ __)
  95.     {
  96.         read();
  97.         solve();
  98.     }
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement