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. set<int> temp;
  12.  
  13. void dfs(vector<emp> am[], emp start){
  14. int counter = 0;
  15. w.push_back(start.wealth);
  16. temp.insert(start.wealth);
  17. for(int i=0; i<am[start.num].size(); i++){
  18. counter = *temp.rbegin() - am[start.num][i].wealth;
  19. d.push_back(counter);
  20. dfs(am, am[start.num][i]);
  21. temp.erase(w[w.size()-1]);
  22. w.pop_back();
  23. }
  24. }
  25.  
  26. int main(){
  27. int n;
  28. cin >> n;
  29. vector<emp> empl(n+2);
  30. for(int i=1; i<=n; i++){
  31. cin >> empl[i].wealth;
  32. empl[i].num = i;
  33. }
  34. for(int i=1; i<=n; i++){
  35. cin >> empl[i].boss;
  36. if(empl[i].boss==-1){
  37. empl[i].boss = 0;
  38. }
  39. }
  40.  
  41. vector<emp> am[n+2];
  42.  
  43. for(int i=1; i<=n; i++){
  44. am[empl[i].boss].push_back(empl[i]);
  45. }
  46.  
  47. dfs(am, am[0][0]);
  48.  
  49. cout << *max_element(d.begin(), d.end());
  50. }
  51.  
Success #stdin #stdout 0s 2880KB
stdin
4
5 10 6 12
2 -1 4 2
stdout
6