func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> g[100001];   long long v[100001];   pair<long long, long long> r[100001];   int mark[100001];   void dfs(int s) {     mark[s] = 1;     r[s] = pair<long long, long long>(0, 0);     for (int i = 0; i < g[s].size(); i++) {       if (!mark[g[s][i]]) {         dfs(g[s][i]);         r[s].first = min(r[s].first, r[g[s][i]].first);         r[s].second = max(r[s].second, r[g[s][i]].second);       }     }     long long k = v[s] - r[s].first - r[s].second;     if (k > 0)       r[s].second = r[s].second + k;     else       r[s].first += k;   }   int main() {     int n;     memset(mark, 0, sizeof mark);     cin >> n;     int a, b;     for (int i = 0; i < n - 1; i++) {       cin >> a >> b;       g[a - 1].push_back(b - 1);       g[b - 1].push_back(a - 1);     }     for (int i = 0; i < n; i++) cin >> v[i];     dfs(0);     long long ans = -r[0].first + r[0].second;     cout << ans << endl;     return 0;   }   