- import java.util.*; 
-   
- public class Main { 
-     static int n; 
-     static char[] color; 
-     static long[] weight; 
-     static List<Integer>[] tree; 
-   
-     static long dfs(int u, int parent, char targetColor) { 
-         long cost = 0; 
-         if (color[u] != targetColor) cost += weight[u]; 
-         for (int v : tree[u]) { 
-             if (v != parent) { 
-                 cost += dfs(v, u, targetColor); 
-             } 
-         } 
-         return cost; 
-     } 
-   
-     public static void-  main (String[]-  args ) {
 
-         Scanner sc  = new-  Scanner (System- . in);
-         n = sc.nextInt(); 
-   
-         color = (" " + sc.next()).toCharArray(); // 1-index 
-         weight = new long[n + 1]; 
-         for (int i = 1; i <= n; i++) { 
-             weight[i] = sc.nextLong(); 
-         } 
-   
-         for (int i = 1; i <= n; i++) tree[i] = new ArrayList<>(); 
-         for (int i = 1; i < n; i++) { 
-             int u = sc.nextInt(), v = sc.nextInt(); 
-             tree[u].add(v); 
-             tree[v].add(u); 
-         } 
-   
-         long-  minCost  = Long- . MAX_VALUE;
 
-   
-         // 枚举每个点作为根节点 
-         for (int root = 1; root <= n; root++) { 
-             char target = color[root]; 
-             long cost = dfs(root, -1, target); 
-             minCost  = Math- . min(- minCost, cost );
-         } 
-   
-     } 
- } 
-   
				aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgc3RhdGljIGludCBuOwogICAgc3RhdGljIGNoYXJbXSBjb2xvcjsKICAgIHN0YXRpYyBsb25nW10gd2VpZ2h0OwogICAgc3RhdGljIExpc3Q8SW50ZWdlcj5bXSB0cmVlOwoKICAgIHN0YXRpYyBsb25nIGRmcyhpbnQgdSwgaW50IHBhcmVudCwgY2hhciB0YXJnZXRDb2xvcikgewogICAgICAgIGxvbmcgY29zdCA9IDA7CiAgICAgICAgaWYgKGNvbG9yW3VdICE9IHRhcmdldENvbG9yKSBjb3N0ICs9IHdlaWdodFt1XTsKICAgICAgICBmb3IgKGludCB2IDogdHJlZVt1XSkgewogICAgICAgICAgICBpZiAodiAhPSBwYXJlbnQpIHsKICAgICAgICAgICAgICAgIGNvc3QgKz0gZGZzKHYsIHUsIHRhcmdldENvbG9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gY29zdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgbiA9IHNjLm5leHRJbnQoKTsKCiAgICAgICAgY29sb3IgPSAoIiAiICsgc2MubmV4dCgpKS50b0NoYXJBcnJheSgpOyAvLyAxLWluZGV4CiAgICAgICAgd2VpZ2h0ID0gbmV3IGxvbmdbbiArIDFdOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICB3ZWlnaHRbaV0gPSBzYy5uZXh0TG9uZygpOwogICAgICAgIH0KCiAgICAgICAgdHJlZSA9IG5ldyBBcnJheUxpc3RbbiArIDFdOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgdHJlZVtpXSA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGludCB1ID0gc2MubmV4dEludCgpLCB2ID0gc2MubmV4dEludCgpOwogICAgICAgICAgICB0cmVlW3VdLmFkZCh2KTsKICAgICAgICAgICAgdHJlZVt2XS5hZGQodSk7CiAgICAgICAgfQoKICAgICAgICBsb25nIG1pbkNvc3QgPSBMb25nLk1BWF9WQUxVRTsKCiAgICAgICAgLy8g5p6a5Li+5q+P5Liq54K55L2c5Li65qC56IqC54K5CiAgICAgICAgZm9yIChpbnQgcm9vdCA9IDE7IHJvb3QgPD0gbjsgcm9vdCsrKSB7CiAgICAgICAgICAgIGNoYXIgdGFyZ2V0ID0gY29sb3Jbcm9vdF07CiAgICAgICAgICAgIGxvbmcgY29zdCA9IGRmcyhyb290LCAtMSwgdGFyZ2V0KTsKICAgICAgICAgICAgbWluQ29zdCA9IE1hdGgubWluKG1pbkNvc3QsIGNvc3QpOwogICAgICAgIH0KCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1pbkNvc3QpOwogICAgfQp9Cg==