Wealth Disparity Problem Code: INOI1601 Codechef Solution

 #include <bits/stdc++.h>
using namespace std;
int w[100001];
vector<int> junior[100001];
int  n;  
int ans;
int rec(int i){
    int mn=INT_MAX;
    for(int j:junior[i])
        mn=min(mn,rec(j));
    if(mn!=INT_MAX)
        ans=max(ans,w[i]-mn);
    return min(mn,w[i]);
}
int main(){  
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cin>>n;
  int tmp,root;
  for(int i=1;i<=n;i++)
      cin>>w[i];
  for(int i=1;i<=n;i++){
      cin>>tmp;
      if(tmp!=-1)
          junior[tmp].push_back(i);
      else
          root=i;
  }
  rec(root);
  cout<<ans<<'\n';
}

Comments