Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int d[200010], n, a[200010];
- void dfs(int v) {
- if (d[a[v]] > d[v] + 1) d[a[v]] = d[v] + 1, dfs(a[v]);
- if (v - 1 >= 0 && d[v - 1] > d[v] + 1) d[v - 1] = d[v] + 1, dfs(v - 1);
- if (v + 1 < n && d[v + 1] > d[v] + 1) d[v + 1] = d[v] + 1, dfs(v + 1);
- }
- int main()
- {
- cin >> n;
- for (int i = 0; i<n; i++) cin >> a[i], a[i]--, d[i] = i + 1;
- d[0] = 0;
- dfs(0);
- for (int i = 0; i<n; i++) cout << d[i] << " ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement