import java.util.*;
import java.io.*;
public class Main {
static List<Integer>[] tree;
static char[] colors;
static long[] weights;
static long minCost
= Long.
MAX_VALUE;
int n
= Integer.
parseInt(br.
readLine()); colors = br.readLine().trim().toCharArray();
weights = new long[n];
for (int i = 0; i < n; i++) {
weights
[i
] = Long.
parseLong(st.
nextToken()); }
for (int i = 0; i < n; i++) tree[i] = new ArrayList<>();
for (int i = 0; i < n - 1; i++) {
int u
= Integer.
parseInt(st.
nextToken()) - 1; int v
= Integer.
parseInt(st.
nextToken()) - 1; tree[u].add(v);
tree[v].add(u);
}
// 遍历每个节点作为根节点
for (int root = 0; root < n; root++) {
char target = colors[root];
long[] sum = new long[1];
boolean valid = dfs(root, -1, target, sum);
if (valid) {
minCost
= Math.
min(minCost, sum
[0]); }
}
}
// 返回是否需要修改该子树,并累加代价
static boolean dfs(int node, int parent, char target, long[] sum) {
boolean needModify = (colors[node] != target);
for (int child : tree[node]) {
if (child == parent) continue;
boolean childNeed = dfs(child, node, target, sum);
if (childNeed) {
needModify = true; // 如果子节点需要修改,则当前节点必须被覆盖
}
}
if (needModify) {
sum[0] += weights[node];
}
return needModify;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgc3RhdGljIExpc3Q8SW50ZWdlcj5bXSB0cmVlOwogICAgc3RhdGljIGNoYXJbXSBjb2xvcnM7CiAgICBzdGF0aWMgbG9uZ1tdIHdlaWdodHM7CiAgICBzdGF0aWMgbG9uZyBtaW5Db3N0ID0gTG9uZy5NQVhfVkFMVUU7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgaW50IG4gPSBJbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwogICAgICAgIGNvbG9ycyA9IGJyLnJlYWRMaW5lKCkudHJpbSgpLnRvQ2hhckFycmF5KCk7CiAgICAgICAgd2VpZ2h0cyA9IG5ldyBsb25nW25dOwogICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgd2VpZ2h0c1tpXSA9IExvbmcucGFyc2VMb25nKHN0Lm5leHRUb2tlbigpKTsKICAgICAgICB9CgogICAgICAgIHRyZWUgPSBuZXcgQXJyYXlMaXN0W25dOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB0cmVlW2ldID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihici5yZWFkTGluZSgpKTsKICAgICAgICAgICAgaW50IHUgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKSAtIDE7CiAgICAgICAgICAgIGludCB2ID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSkgLSAxOwogICAgICAgICAgICB0cmVlW3VdLmFkZCh2KTsKICAgICAgICAgICAgdHJlZVt2XS5hZGQodSk7CiAgICAgICAgfQoKICAgICAgICAvLyDpgY3ljobmr4/kuKroioLngrnkvZzkuLrmoLnoioLngrkKICAgICAgICBmb3IgKGludCByb290ID0gMDsgcm9vdCA8IG47IHJvb3QrKykgewogICAgICAgICAgICBjaGFyIHRhcmdldCA9IGNvbG9yc1tyb290XTsKICAgICAgICAgICAgbG9uZ1tdIHN1bSA9IG5ldyBsb25nWzFdOwogICAgICAgICAgICBib29sZWFuIHZhbGlkID0gZGZzKHJvb3QsIC0xLCB0YXJnZXQsIHN1bSk7CiAgICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgICAgbWluQ29zdCA9IE1hdGgubWluKG1pbkNvc3QsIHN1bVswXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtaW5Db3N0KTsKICAgIH0KCiAgICAvLyDov5Tlm57mmK/lkKbpnIDopoHkv67mlLnor6XlrZDmoJHvvIzlubbntK/liqDku6Pku7cKICAgIHN0YXRpYyBib29sZWFuIGRmcyhpbnQgbm9kZSwgaW50IHBhcmVudCwgY2hhciB0YXJnZXQsIGxvbmdbXSBzdW0pIHsKICAgICAgICBib29sZWFuIG5lZWRNb2RpZnkgPSAoY29sb3JzW25vZGVdICE9IHRhcmdldCk7CiAgICAgICAgZm9yIChpbnQgY2hpbGQgOiB0cmVlW25vZGVdKSB7CiAgICAgICAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIGNvbnRpbnVlOwogICAgICAgICAgICBib29sZWFuIGNoaWxkTmVlZCA9IGRmcyhjaGlsZCwgbm9kZSwgdGFyZ2V0LCBzdW0pOwogICAgICAgICAgICBpZiAoY2hpbGROZWVkKSB7CiAgICAgICAgICAgICAgICBuZWVkTW9kaWZ5ID0gdHJ1ZTsgLy8g5aaC5p6c5a2Q6IqC54K56ZyA6KaB5L+u5pS577yM5YiZ5b2T5YmN6IqC54K55b+F6aG76KKr6KaG55uWCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5lZWRNb2RpZnkpIHsKICAgICAgICAgICAgc3VtWzBdICs9IHdlaWdodHNbbm9kZV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZWVkTW9kaWZ5OwogICAgfQp9