Advertisement
deushiro

Untitled

Jan 26th, 2020
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <utility>
  5. #include <string>
  6. #include <math.h>
  7. #include <map>
  8. #include <set>
  9. #include <queue>
  10.  
  11. using namespace std;
  12.  
  13. typedef long long ll;
  14. vector <vector <int>> g;
  15. vector <vector <int>> rg;
  16. vector <int> used;
  17. vector <int> ls;
  18. vector <int> p;
  19.  
  20. int dfs(int v, int len) {
  21.     int maxi = len;
  22.     for (int u : g[v]) {
  23.         maxi = max(dfs(u, len + 1), maxi);
  24.     }
  25.     p[v] = maxi;
  26.     return maxi;
  27. }
  28. void dfs2(int v, int len) {
  29.     if (g[v].size() == 0) {
  30.         ls.push_back(len);
  31.     }
  32.     int maxi = 0;
  33.     int res = 0;
  34.     for (int u : g[v]) {
  35.         if (p[u] > maxi) {
  36.             maxi = p[u];
  37.             res = u;
  38.        }
  39.     }
  40.     for (int u : g[v]) {
  41.         if (u != res)
  42.             dfs(u, 1);
  43.         else
  44.             dfs(u, len + 1);
  45.     }
  46. }
  47.  
  48.  
  49. int main()
  50. {
  51.     ios_base::sync_with_stdio(false);
  52.     cin.tie(0);
  53.  
  54.     int n, kk;
  55.     cin >> n >> kk;
  56.     int k = kk;
  57.     g.resize(n);
  58.     rg.resize(n);
  59.     used.resize(n);
  60.     p.resize(n);
  61.  
  62.     for (int i = 1; i < n; i++) {
  63.         int v;
  64.         cin >> v;
  65.         v--;
  66.         g[v].push_back(i);
  67.         rg[i].push_back(v);
  68.     }
  69.  
  70.     dfs(0, 1);
  71.     dfs2(0, 1);
  72.  
  73.  
  74.     sort(ls.begin(), ls.end());
  75.     reverse(ls.begin(), ls.end());
  76.  
  77.     ll ans = 0;
  78.     for (int i = 0; i < min(k, (int)ls.size()); i++)
  79.         ans += ls[i];
  80.     for (int i = 0; i < ls.size(); ++i) {
  81.         cout << ls[i] << " ";
  82.     }
  83.     cout << endl;
  84.     cout << ans;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement