#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1<<19;
vector<int> nei[N];
string s, ss;
void dfs(int u, int p){
if (ss.size() > 0 or s[u - 1] == '0')
ss += s[u-1];
for (int i : nei[u])
if (i != p)
dfs(i, u);
}
int solve(){
long long l = 0, r = ss.size() - 1, ans = r + 1;
while (l < r){
l++;
while (l < r and ss[l] == '0')
l++;
if (l >= r)
break;
ans += r - l;
r--;
while (l < r and ss[r] == '1')
r--;
if (l >= r)
break;
ans += r - l;
}
return ans;
}
int main(){
int n;
cin>>n>>s;
for (int i=1;i<n;i++){
int a, b;
cin>>a>>b;
nei[a].push_back(b);
nei[b].push_back(a);
}
for (int i=1;i<=n and ss.size() == 0;i++){
if (nei[i].size() == 1)
dfs(i, i);
}
while (ss.back() == '1')
ss.pop_back();
int ans = solve();
reverse(begin(ss), end(ss));
ans = min(ans, solve());
cout<<ans<<endl;
}