#include <stdio.h>
#include <vector>
using namespace std;
#define MN 1005
vector<int> g[MN];
int c[MN], n, R, cnt[MN], f[MN];
bool vis[MN];
int FindMax() {
int k = -1;
double M = -1e9;
for (int i = 1; i <= n; i++)
if(!vis[i] && i != R && M < (double)c[i]/cnt[i])
M = (double)c[i]/cnt[i], k = i;
return k;
}
void go(int a, int b) {
cnt[b] += cnt[a];
c[b] += c[a]; f[a] = b;
for (int i = 0; i < g[a].size(); i++) f[g[a][i]] = b;
}
void calc() {
int res, p, k;
res = 0;
for (int i = 0; i < n-1; i++) {
k = FindMax();
vis[k] = 1;
p = f[k];
while (vis[p]) p = f[p];
res += c[k]*cnt[p];
go(k,p);
}
res += c[R];
printf("%d",res);
}
int main() {
scanf("%d%d",&n,&R);
f[R] = -1;
for (int i = 1; i <= n; i++) scanf("%d",&c[i]), cnt[i] = 1;
int a, b;
for (int i = 1; i < n; i++) {
scanf("%d%d",&a,&b);
g[a].push_back(b);
f[b] = a;
}
calc();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTU4gMTAwNQp2ZWN0b3I8aW50PiBnW01OXTsKaW50IGNbTU5dLCBuLCBSLCBjbnRbTU5dLCBmW01OXTsKYm9vbCB2aXNbTU5dOwppbnQgRmluZE1heCgpIHsKCWludCBrID0gLTE7Cglkb3VibGUgTSA9IC0xZTk7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCgkJaWYoIXZpc1tpXSAmJiBpICE9IFIgJiYgTSA8IChkb3VibGUpY1tpXS9jbnRbaV0pCgkJCU0gPSAoZG91YmxlKWNbaV0vY250W2ldLCBrID0gaTsKCXJldHVybiBrOwp9CnZvaWQgZ28oaW50IGEsIGludCBiKSB7CgljbnRbYl0gKz0gY250W2FdOwoJY1tiXSArPSBjW2FdOyBmW2FdID0gYjsKCWZvciAoaW50IGkgPSAwOyBpIDwgZ1thXS5zaXplKCk7IGkrKykgZltnW2FdW2ldXSA9IGI7Cn0Kdm9pZCBjYWxjKCkgewoJaW50IHJlcywgcCwgazsKCXJlcyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG4tMTsgaSsrKSB7CgkJayA9IEZpbmRNYXgoKTsKCQl2aXNba10gPSAxOwoJCXAgPSBmW2tdOwoJCXdoaWxlICh2aXNbcF0pIHAgPSBmW3BdOwoJCXJlcyArPSBjW2tdKmNudFtwXTsKCQlnbyhrLHApOwoJfQoJcmVzICs9IGNbUl07CglwcmludGYoIiVkIixyZXMpOwp9CmludCBtYWluKCkgewoJc2NhbmYoIiVkJWQiLCZuLCZSKTsKCWZbUl0gPSAtMTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgc2NhbmYoIiVkIiwmY1tpXSksIGNudFtpXSA9IDE7CglpbnQgYSwgYjsKCWZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CgkJc2NhbmYoIiVkJWQiLCZhLCZiKTsKCQlnW2FdLnB1c2hfYmFjayhiKTsKCQlmW2JdID0gYTsKCX0KCWNhbGMoKTsKCXJldHVybiAwOwp9