Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define y1 y11
- #define sc second
- #define fr first
- #define mp make_pair
- #define pb push_back
- #define mt make_tuple
- #define skip continue
- #define all(x) x.begin(), x.end()
- #define NAME "code"
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<ll, ll> pii;
- typedef pair<ll, pii> piii;
- const ll inf = 1e9;
- const int maxn = 1e5 + 11;
- ll n, k, a[maxn], c[maxn];
- vector<int> g[maxn];
- void dfs(int v, int pr, int l, int r, int cnt){
- int q, w;
- c[v] = cnt + r - l + 1;
- for(int to : g[v]){
- if(to == pr) skip;
- if(max(to - k, 1ll) <= r) dfs(to, v, l, min(to + k, n), cnt);
- else dfs(to, v, max(to - k, 1ll), min(to + k, n), cnt + r - l + 1);
- }
- }
- int main(){
- freopen(NAME".in", "r", stdin);
- freopen(NAME".out", "w", stdout);
- cin >> n >> k;
- for(int i = 1, x; i <= n; ++i){
- cin >> x;
- g[x].pb(i);
- }
- dfs(0, -1, 0, -1, 0);
- for(int i = 1; i <= n; ++i){
- cout << c[i] << ' ';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement