Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define y1 y11
  3. #define sc second
  4. #define fr first
  5. #define mp make_pair
  6. #define pb push_back
  7. #define mt make_tuple
  8. #define skip continue
  9. #define all(x) x.begin(), x.end()
  10. #define NAME "code"
  11.  
  12. using namespace std;
  13.  
  14. typedef long long ll;
  15. typedef unsigned long long ull;
  16. typedef pair<ll, ll> pii;
  17. typedef pair<ll, pii> piii;
  18.  
  19. const ll inf = 1e9;
  20. const int maxn = 1e5 + 11;
  21.  
  22. ll n, k, a[maxn], c[maxn];
  23.  
  24. vector<int> g[maxn];
  25.  
  26. void dfs(int v, int pr, int l, int r, int cnt){
  27. int q, w;
  28.  
  29. c[v] = cnt + r - l + 1;
  30.  
  31. for(int to : g[v]){
  32. if(to == pr) skip;
  33. if(max(to - k, 1ll) <= r) dfs(to, v, l, min(to + k, n), cnt);
  34. else dfs(to, v, max(to - k, 1ll), min(to + k, n), cnt + r - l + 1);
  35. }
  36. }
  37.  
  38. int main(){
  39.  
  40. freopen(NAME".in", "r", stdin);
  41. freopen(NAME".out", "w", stdout);
  42.  
  43. cin >> n >> k;
  44.  
  45. for(int i = 1, x; i <= n; ++i){
  46. cin >> x;
  47. g[x].pb(i);
  48. }
  49.  
  50. dfs(0, -1, 0, -1, 0);
  51.  
  52. for(int i = 1; i <= n; ++i){
  53. cout << c[i] << ' ';
  54. }
  55.  
  56. return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement