Advertisement
Mirbek

Untitled

Apr 23rd, 2023
784
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e6 + 6;
  6.  
  7. int n, res;
  8. int dp[N];
  9. vector <int> g[N];
  10.  
  11. void dfs(int v, int pr = -1) {
  12.     vector <int> vec;
  13.     for (int u : g[v]) {
  14.         if (u == pr) continue;
  15.         dfs(u, v);
  16.         vec.push_back(dp[u]);
  17.     }
  18.     sort(vec.rbegin(), vec.rend());
  19.     if (vec.empty()) {
  20.         dp[v] = (int)g[v].size() + 1;
  21.     } else {
  22.         dp[v] = (int)g[v].size() + vec[0] - 1;
  23.     }
  24.     res = max(res, dp[v]);
  25.     if (vec.size() >= 2) {
  26.         res = max(res, vec[0] + vec[1] - 1 + (int)g[v].size() - 2);
  27.     }
  28. }
  29.  
  30. int main(){
  31.     ios::sync_with_stdio(0);
  32.     cin >> n;
  33.    
  34.     for (int i = 1; i < n; i++) {
  35.         int u, v;
  36.         cin >> u >> v;
  37.         g[u].push_back(v);
  38.         g[v].push_back(u);
  39.     }
  40.    
  41.     dfs(1);
  42.    
  43.     for (int i = 1; i <= n; i++) {
  44.         cout << dp[i] << " ";
  45.     }
  46.     cout << endl;
  47.    
  48.     cout << res << endl;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement