#include <bits/stdc++.h>
using namespace std;
long long n, x, y, num[100005], res, a[100005], b[100005];
bool vis[100005];
vector<int> v[100005];
void dfs(long long now, long long pre) {
  for (long long i = 0; i < v[now].size(); i++) {
    int j = v[now][i];
    if (j != pre) {
      dfs(j, now);
      a[now] = max(a[now], a[j]);
      b[now] = max(b[now], b[j]);
    }
  }
  num[now] += a[now];
  num[now] -= b[now];
  if (num[now] < 0)
    a[now] += -num[now];
  else
    b[now] += num[now];
}
int main() {
  cin >> n;
  for (long long i = 0; i < n - 1; i++) {
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (long long i = 1; i <= n; i++) cin >> num[i];
  dfs(1, -1);
  res = a[1] + b[1];
  cout << res << '\n';
  return 0;
}
