#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:512000000")
template <class T>
T sqr(T a) {
  return a * a;
}
int n;
vector<vector<int> > g;
int val[1 << 17];
bool was[1 << 17] = {0};
pair<long long, long long> dfs(int v) {
  was[v] = 1;
  long long d1 = 0, d2 = 0;
  for (int i = 0; i < (int)(g[v]).size(); ++i) {
    int to = g[v][i];
    if (was[to]) continue;
    pair<long long, long long> r = dfs(to);
    d1 = min(d1, r.first);
    d2 = max(d2, r.second);
  }
  int tval = val[v] + d1 + d2;
  if (tval > 0)
    d1 -= tval;
  else
    d2 -= tval;
  return make_pair(d1, d2);
}
int main() {
  scanf("%d", &n);
  g.resize(n);
  for (int i = 0; i < n - 1; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    --u;
    --v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 0; i < n; ++i) scanf("%d", &val[i]);
  pair<long long, long long> res = dfs(0);
  cout << res.second - res.first << endl;
  return 0;
}
