Advertisement
Guest User

Untitled

a guest
Aug 14th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.41 KB | None | 0 0
  1. int d[200010], n, a[200010];
  2.  
  3. void dfs(int v) {
  4.     if (d[a[v]] > d[v] + 1) d[a[v]] = d[v] + 1, dfs(a[v]);
  5.     if (v - 1 >= 0 && d[v - 1] > d[v] + 1) d[v - 1] = d[v] + 1, dfs(v - 1);
  6.     if (v + 1 < n && d[v + 1] > d[v] + 1) d[v + 1] = d[v] + 1, dfs(v + 1);
  7. }
  8.  
  9. int main()
  10. {
  11.     cin >> n;
  12.     for (int i = 0; i<n; i++) cin >> a[i], a[i]--, d[i] = i + 1;
  13.     d[0] = 0;
  14.     dfs(0);
  15.     for (int i = 0; i<n; i++) cout << d[i] << " ";
  16. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement