Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. #define FILE_INPUT
  2. #define _CRT_SECURE_NO_WARNINGS
  3. // _
  4. // (_)
  5. // _ __ ___ __ _ _ ___ _ __ _ __ ___
  6. //| '_ ` _ \ / _` | |/ _ \| '__| '__/ _ \
  7. //| | | | | | (_| | | (_) | | | | | (_) |
  8. //|_| |_| |_|\__,_| |\___/|_| |_| \___/
  9. // _/ |
  10. // |__/
  11. #include <bits/stdc++.h>
  12.  
  13. using namespace std;
  14.  
  15. typedef long long ll;
  16. typedef unsigned long long ull;
  17. typedef double dbl;
  18. typedef long double ldbl;
  19. typedef pair<int, int> pii;
  20. typedef pair<ll, ll> pll;
  21. typedef string str;
  22. typedef vector<int> vi;
  23. typedef vector<ll> vll;
  24. typedef vector<bool> vbl;
  25.  
  26. #define majorro cout.precision(20); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  27. #define pb push_back
  28. #define forn(i, n) for(ll (i) = 0; (i) < (n); ++(i))
  29. #define fornm(i, m, n) for(ll (i) = (m); (i) < (n); ++(i))
  30. #define rfornm(i, m, n) for(ll (i) = (m); (i) >= (n); --(i))
  31. #define readvec(vector, n) {ll temp_vec_val;forn(i, n){cin >> temp_vec_val;vector.push_back(temp_vec_val);}}
  32. #define printvec(vector, delimeter) {ll length_of_vector=vector.size();\
  33. forn(elementvec, length_of_vector){cout << vector[elementvec] << delimeter;}}
  34. #define printarr(arr, length, delimeter) {forn(elementarr, length){cout << arr[elementarr] << delimeter;}}
  35. #define sortvec(vector) sort(vector.begin(), vector.end())
  36. #define rsortvec(vector) sort(vector.rbegin(), vector.rend())
  37.  
  38.  
  39. struct pair_hash
  40. {
  41. template <class T1, class T2>
  42. std::size_t operator() (const std::pair<T1, T2>& pair) const
  43. {
  44. return std::hash<T1>()(pair.first) ^ std::hash<T2>()(pair.second);
  45. }
  46. };
  47.  
  48. ll digit_sum(ll num)
  49. {
  50. ll dig_sum = 0;
  51. while(num > 0)
  52. {
  53. dig_sum += num % 10;
  54. num /= 10;
  55. }
  56. return dig_sum;
  57. }
  58.  
  59. const ldbl EPS = 0.000001;
  60. const ll MOD = 1000000007;
  61. // const ll MOD = 3037000499;
  62. // const ull MOD = 1000000000000000003;
  63. const ll INF = 1e18;
  64. const double pi = 2 * acos(0.0);
  65. ll n, m, k, p, q, t, sum = 0, cnt= 0;
  66. ll mx = INT64_MIN;
  67. ll mn = INT64_MAX;
  68. bool flag = 0;
  69. vll v;
  70. str s = "", s1, s2;
  71.  
  72. void bad_solve(){}
  73.  
  74. ll findnum(vll& vv, ll num)
  75. {
  76. ll l = 0, r = n-1;
  77. while(l < r)
  78. {
  79. ll mid = (l+r)/2;
  80. if(vv[mid] == num) return mid;
  81. if(vv[mid] < num) l = mid+1;
  82. else r = mid;
  83. }
  84. return l;
  85. }
  86.  
  87. bool used[(ll)3e5+1] = {0};
  88. vll ans;
  89. vector<vll> g;
  90.  
  91. void dfs(ll vt, ll dpt)
  92. {
  93. used[vt] = 1;
  94. bool fl = 0;
  95. for(auto u : g[vt])
  96. {
  97. if(!used[u])
  98. {
  99. dfs(u, dpt+1);
  100. fl = 1;
  101. }
  102. }
  103. if(!fl)
  104. {
  105. ans.pb(dpt);
  106. return;
  107. }
  108. }
  109.  
  110. ll dfs2(ll vt, ll dpt)
  111. {
  112. if(!vt)
  113. {
  114. return dpt;
  115. }
  116. for(auto u : g[vt])
  117. {
  118. return dfs2(u, dpt+1);
  119. }
  120. return 228;
  121. }
  122.  
  123. void solve() //set.merge() -> c++17
  124. //DELET DEBUG OUTPUT!11!1
  125. //1+2+3+...+n == (n*(n+1))/2
  126. //"YES" OUTPUT!!!!
  127. //__builtin_popcountll() -> __popcnt64() from <intrin.h>
  128. {
  129. cin >> n >> k;
  130. g.resize(n);
  131. pair<bool, ll> lfs[n] = {{0,0}};
  132. fornm(i ,1, n)
  133. {
  134. cin >> p;
  135. --p;
  136. g[i].pb(p);
  137. lfs[p].first = 1;
  138. lfs[i].second = lfs[p].second+1;
  139. }
  140.  
  141. vector<pll> vv;
  142. forn(i, n)
  143. {
  144. if(!lfs[i].first) vv.pb({lfs[i].second, i});
  145. }
  146. m = vv.size();
  147. rsortvec(vv);
  148. forn(i, m)
  149. {
  150. ll u = vv[i].second;
  151. dfs(u, 1);
  152. }
  153. rsortvec(ans);
  154. forn(i, min(k, (ll)ans.size()))
  155. {
  156. sum += ans[i];
  157. }
  158. cout << sum;
  159. }
  160.  
  161. int main()
  162. {
  163. #ifdef FILE_INPUT
  164. freopen("F:\\repos\\projects\\contests_vsc\\in.txt", "r", stdin);
  165. freopen("F:\\repos\\projects\\contests_vsc\\out.txt", "w", stdout);
  166. #endif
  167. majorro
  168.  
  169. solve();
  170.  
  171. // freopen("test.txt", "w", stdout);
  172. // bad_solve();
  173.  
  174. // memset(v, INT_MAX, 1000*2000*sizeof(int));
  175.  
  176. return 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement