#include <bits/stdc++.h>
using namespace std;
int head[200050], to[200050 << 1], nxt[200050 << 1], cnt, n, siz[200050];
int mx[200050], se[200050];
long long ans;
char w[200050];
inline void add(int u, int v) {
  to[++cnt] = v;
  nxt[cnt] = head[u];
  head[u] = cnt;
}
void d1(int x, int y) {
  int i;
  siz[x] = w[x] - '0';
  for (i = head[x]; i; i = nxt[i])
    if (to[i] != y) {
      d1(to[i], x);
      siz[x] += siz[to[i]];
      int v = mx[to[i]] + 1;
      if (v > mx[x])
        se[x] = mx[x], mx[x] = v;
      else if (v > se[x])
        se[x] = v;
    }
}
void d2(int x, int y) {
  int i;
  ans += min(se[x] + 1, mx[x] - 1);
  for (i = head[x]; i; i = nxt[i])
    if (to[i] != y) {
      int v = (mx[to[i]] + 1 == mx[x]) ? (se[x] + 1) : (mx[x] + 1);
      if (v > mx[to[i]])
        se[to[i]] = mx[to[i]], mx[to[i]] = v;
      else if (v > se[to[i]])
        se[to[i]] = v;
      d2(to[i], x);
    }
}
int main() {
  scanf("%d", &n);
  int i, x, y;
  for (i = 1; i < n; i++) scanf("%d%d", &x, &y), add(x, y), add(y, x);
  scanf("%s", w + 1);
  d1(1, 0);
  d2(1, 0);
  printf("%lld\n", ans);
}
