fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct emp{
  5. int wealth;
  6. int boss;
  7. int num;
  8. };
  9.  
  10. vector<int> w, d;
  11.  
  12. void dfs(vector<emp> am[], emp start){
  13. int counter = 0;
  14. w.push_back(start.wealth);
  15. for(int i=0; i<am[start.num].size(); i++){
  16. counter = *max_element(w.begin(), w.end()) - am[start.num][i].wealth;
  17. d.push_back(counter);
  18. dfs(am, am[start.num][i]);
  19. w.pop_back();
  20. }
  21. }
  22.  
  23. int main(){
  24. int n;
  25. cin >> n;
  26. vector<emp> empl(n+2);
  27. for(int i=1; i<=n; i++){
  28. cin >> empl[i].wealth;
  29. empl[i].num = i;
  30. }
  31. for(int i=1; i<=n; i++){
  32. cin >> empl[i].boss;
  33. if(empl[i].boss==-1){
  34. empl[i].boss = 0;
  35. }
  36. }
  37.  
  38. vector<emp> am[n+2];
  39.  
  40. for(int i=1; i<=n; i++){
  41. am[empl[i].boss].push_back(empl[i]);
  42. }
  43.  
  44. dfs(am, am[0][0]);
  45.  
  46. cout << *max_element(d.begin(), d.end());
  47. }
  48.  
Success #stdin #stdout 0s 2880KB
stdin
4
5 10 6 12
2 -1 4 2
stdout
6