#include <bits/stdc++.h>
using namespace std;
const int maxn = 100100;
long long int dp[maxn], re[maxn], a[maxn];
vector<long long int> mp[maxn];
int n, s;
void dfs(int now, int pre) {
  vector<long long int> tmp;
  int i;
  for (i = 0; i < (int)mp[now].size(); i++) {
    int en = mp[now][i];
    if (en != pre) {
      a[en]--;
      dfs(en, now);
      tmp.push_back(dp[en] + 1);
    }
  }
  sort(tmp.begin(), tmp.end(), greater<long long int>());
  int lim = min(a[now], (long long int)tmp.size());
  for (i = 0; i < lim; i++) {
    dp[now] += tmp[i];
  }
  a[now] -= lim;
  dp[now] += lim;
  for (i = 0; i < (int)mp[now].size(); i++) {
    if (mp[now][i] != pre) {
      if (!a[now]) {
        break;
      }
      dp[now] += min(a[now], a[mp[now][i]]) * 2;
      a[now] -= min(a[now], a[mp[now][i]]);
    }
  }
}
int main() {
  scanf("%d", &n);
  int i;
  if (n == 1) {
    printf("0");
    return 0;
  }
  for (i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  for (i = 1; i <= n - 1; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    mp[x].push_back(y);
    mp[y].push_back(x);
  }
  scanf("%d", &s);
  dfs(s, -1);
  printf("%I64d", dp[s]);
  return 0;
}
