Advertisement
tuki2501

Largest cycle in a tree

Apr 2nd, 2020
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 100005;
  5.  
  6. #define ii pair<int, int>
  7. #define fi first
  8. #define sc second
  9.  
  10. vector<int> a[N];
  11. int vis[N];
  12. int mx = 0, l, r;
  13.  
  14. ii dfs(int i) {
  15.     vis[i] = 1;
  16.     vector<ii> v;
  17.     for (auto j : a[i]) if (!vis[j]) {
  18.         v.push_back(dfs(j));
  19.     }
  20.     if (v.size() == 0) return ii(0, i);
  21.     else if (v.size() == 1) {
  22.         if (v[0].fi + 1 > mx) {
  23.             mx = v[0].fi + 1;
  24.             l = v[0].sc; r = i;
  25.         }
  26.     }
  27.     else {
  28.         sort(v.begin(), v.end(), greater<ii>());
  29.         if (v[0].fi + v[1].fi + 1 > mx) {
  30.             mx = v[0].fi + v[1].fi + 1;
  31.             l = v[0].sc; r = v[1].sc;
  32.         }
  33.     }
  34.     return ii(v[0].fi + 1, v[0].sc);
  35. }
  36.  
  37. int main() {
  38.     //freopen("in", "r", stdin);
  39.     int n; cin >> n;
  40.     for (int i = 1; i < n; i++) {
  41.         int u, v; cin >> u >> v;
  42.         a[u].push_back(v);
  43.         a[v].push_back(u);
  44.     }
  45.     l = r = 1; dfs(1);
  46.     cout << l << ' ' << r << '\n';
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement