fork(15) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. int n, dummy, root, ans=INT_MIN;
  5. vector < vector < int > > adj; vector < int > value;
  6.  
  7. void solve(int node, int maxval)
  8. {
  9. maxval=max(maxval, value[node]);
  10. ans=max(ans, maxval-value[node]);
  11. for (int i=0; i<adj[node].size(); i++) solve(adj[node][i], maxval);
  12. }
  13.  
  14. signed main()
  15. {
  16. ios_base::sync_with_stdio(0);
  17. cin.tie(0);
  18. cin >> n;
  19. adj.resize(n+1);
  20. value.resize(n+1);
  21. for (int i=1; i<=n; i++) cin >> value[i];
  22. for (int i=1; i<=n; i++)
  23. {
  24. cin >> dummy;
  25. if (dummy==-1) root=i;
  26. else adj[dummy].push_back(i);
  27. }
  28. solve(root, value[root]);
  29. cout << ans;
  30. }
Success #stdin #stdout 0s 3464KB
stdin
4
5 10 6 12
2 -1 4 2
stdout
6