#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  return (b == 0 ? a : gcd(b, a % b));
}
long long int lcm(long long int a, long long int b) {
  return (a * (b / gcd(a, b)));
}
long long int power(long long int x, long long int y) {
  long long int ans = 1;
  while (y > 0) {
    if (y & 1) ans = (ans * x) % 1000000007;
    x = (x * x) % 1000000007;
    y /= 2;
  }
  return ans;
}
long long int dx[] = {1, 1, 0, -1, -1, -1, 0, 1},
              dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
const int INF = 2034567891;
const long long int INF64 = 1234567890123456789ll;
const long double pi = 3.1415926535897932384626434;
vector<long long int> vec[100005];
long long int n, add[100005], sub[100005], val[100005];
void dfs(int s, int p) {
  for (auto i : vec[s]) {
    if (i == p) continue;
    dfs(i, s);
    add[s] = max(add[s], add[i]);
    sub[s] = max(sub[s], sub[i]);
  }
  long long int tm = val[s] + add[s] - sub[s];
  if (tm > 0)
    sub[s] += tm;
  else
    add[s] -= tm;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long int a, b;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    vec[a].push_back(b);
    vec[b].push_back(a);
  }
  for (int i = 1; i < n + 1; i++) cin >> val[i];
  dfs(1, 0);
  cout << add[1] + sub[1];
}
