Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. using namespace std;
  6.  
  7. //#define int long long
  8. const int MAXN = 2 * 1e5 + 10;
  9. int n;
  10. vector <int> g[MAXN];
  11.  
  12. void read()
  13. {
  14.     cin >> n;
  15.     for (int i = 0; i < n - 1; i++)
  16.     {
  17.         int u, v;
  18.         cin >> u >> v;
  19.         u--; v--;
  20.         g[u].push_back(v);
  21.         g[v].push_back(u);
  22.     }
  23. }
  24.  
  25. int fans[MAXN];
  26. int sz[MAXN];
  27. int ans = 0;
  28. bool used[MAXN];
  29.  
  30. void dfs(int v, int size_comp, int p)
  31. {
  32.     sz[v] = 1;
  33.     int m = 0;
  34.     for (auto i : g[v])
  35.     {
  36.         if (i != p && !used[i])
  37.         {
  38.             dfs(i, size_comp, v);
  39.             sz[v] += sz[i];
  40.             m = max(sz[i], m);
  41.         }
  42.     }
  43.     m = max(m, size_comp - sz[v]);
  44.     if (m <= size_comp / 2)
  45.     {
  46.         ans = v;
  47.     }
  48. }
  49.  
  50. void find_decomposition(int v, int size, int p)
  51. {
  52.     dfs(v, size, v);
  53.     int u = ans;
  54.     fans[u] = p + 1;
  55. //    dfs(u, size, u);
  56.  
  57.     used[u] = true;
  58.  
  59.     for (int i = 0; i < g[u].size(); i++)
  60.     {
  61.         if (!used[g[u][i]])
  62.         {
  63.             int m = sz[g[u][i]];
  64.            
  65.             if (m > sz[u])
  66.             {
  67.                 m = size - sz[u];
  68.             }
  69.  
  70.             find_decomposition(g[u][i], m, u);
  71.         }
  72.     }
  73. }
  74.  
  75. void run()
  76. {
  77.     find_decomposition(0, n, -1);
  78. }
  79.  
  80. void write()
  81. {
  82.     for (int i = 0; i < n; i++)
  83.     {
  84.         cout << fans[i] << " ";
  85.     }
  86. }
  87.  
  88. signed main()
  89. {
  90.     ios_base::sync_with_stdio(false);
  91.     cin.tie(0);
  92.     cout.tie(0);
  93.     read();
  94.     run();
  95.     write();
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement