Advertisement
deushiro

Untitled

Jan 26th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 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.     if (g[v].size() == 0) {
  23.         ls.push_back(len);
  24.     }
  25.     for (int u : g[v]) {
  26.         maxi = max(dfs(u, len + 1), maxi);
  27.     }
  28.     p[v] = maxi;
  29.     return maxi;
  30. }
  31.  
  32.  
  33. int main()
  34. {
  35.     ios_base::sync_with_stdio(false);
  36.     cin.tie(0);
  37.  
  38.     int n, kk;
  39.     cin >> n >> kk;
  40.     int k = kk;
  41.     g.resize(n);
  42.     rg.resize(n);
  43.     used.resize(n);
  44.     p.resize(n);
  45.  
  46.     for (int i = 1; i < n; i++) {
  47.         int v;
  48.         cin >> v;
  49.         v--;
  50.         g[v].push_back(i);
  51.         rg[i].push_back(v);
  52.     }
  53.  
  54.     dfs(0, 1);
  55.  
  56.  
  57.     sort(ls.begin(), ls.end());
  58.     reverse(ls.begin(), ls.end());
  59.  
  60.     ll ans = 0;
  61.     for (int i = 0; i < min(k, (int)ls.size()); i++)
  62.         ans += ls[i];
  63.     for (int i = 0; i < n; ++i) {
  64.         cout << i + 1 << " " << p[i] << endl;
  65.     }
  66.  
  67.     cout << ans;
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement