func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN = 1e5 + 5;   vector<int> adj[maxN];   int s[maxN], par[maxN];   void dfs(int n, int p) {     par[n] = p;     for (int i = int(0); i < int((int)adj[n].size()); i++) {       if (adj[n][i] != p) dfs(adj[n][i], n);     }   }   int main() {     ios_base::sync_with_stdio(0), cin.tie(0), cin.tie(0), cout.tie(0),         cout.precision(15);     int n, tmp;     cin >> n;     for (int i = int(0); i < int(n - 1); i++) {       cin >> tmp;       tmp -= 1;       adj[tmp].push_back(i + 1);     }     dfs(0, -1);     for (int i = int(0); i < int(n); i++) {       cin >> s[i];     }     long long ans = s[0];     for (int i = int(0); i < int(n); i++) {       if (s[i] == -1) {         int n = i, tt = s[par[i]];         int mini = 2000000000;         for (int j = int(0); j < int((int)adj[n].size()); j++) {           if (s[adj[n][j]] < tt) {             cout << -1;             return 0;           }           mini = min(mini, s[adj[n][j]] - tt);         }         if (mini != 2000000000) ans += mini;         for (int j = int(0); j < int((int)adj[n].size()); j++) {           ans += s[adj[n][j]] - tt - mini;         }       }     }     cout << ans;   }   