#include <bits/stdc++.h>
using namespace std;
int n,ans;
vector<vector<int>> g;
vector<bool> gen;
vector<int> dp;
void dfs(int c, int p){
int s=0;
for(auto a:g[c]){
if(a==p)continue;
dfs(a,c);
s+=dp[a];
}
if(gen[c])dp[c]=max(s-1,1);
else dp[c]=max(s, 0);
}
void pomeri(int c, int p, int pren){
int tmp=dp[c];
int s=0;
if(p!=-1){
int tmp2=dp[p];
int suma=pren-dp[c];
if(gen[p])dp[p]=max(suma-1,1);
else dp[p]=max(suma,0);
for(auto a:g[c])s+=dp[a];
if(gen[c])dp[c]=max(s-1,1);
else dp[c]=max(s,0);
ans=max(ans,dp[c]);
for(auto a:g[c]){
if(a==p)continue;
pomeri(a,c,s);
}
dp[c]=tmp;
dp[p]=tmp2;
}
else{
for(auto a:g[c])s+=dp[a];
for(auto a:g[c])pomeri(a,c,s);
}
}
int main(){
// unesemo, smanjimo sve za po 1, iracunamo br genratora
cin>>n;
g.resize(n);
for(int i=0;i<n;i++)g[i].clear();
for(int i=0;i<n-1;i++){
int x,y;
cin>>x>>y;
x--;y--;
g[x].push_back(y);
g[y].push_back(x);
}
gen.resize(n);
string s;
cin>>s;
for(int i=0;i<n;i++){
if(s[i]=='0')gen[i]=false;
else gen[i]=true;
}
int sumaa=0;
for(int i=0;i<n;i++)sumaa+=gen[i];
// ako je br jedan ili dva odgovor je jedan ili 2
if(sumaa<=2){
cout<<sumaa<<endl;
return 0;
}
// izracunamo dp za neki cvor kao koren
dp.assign(n,0);
dfs(0,-1);
//pomeramo koren
ans=dp[0];
pomeri(0,-1,0);
cout<<max(ans,2)<<endl;
return 0;
}