#include<bits/stdc++.h>
#include<vector>
#define N 200005
#define LL long long
#define PAIR pair<int,int>
using namespace std;
int n,lw,f[N],g[N],a[N]; PAIR w[N]; LL ans; vector<int> G[N];
void dfs(int t,int fa)
{
	int i; g[t]=a[t];
	for(i=0;i<G[t].size();i++)
		if(G[t][i]!=fa){
			dfs(G[t][i],t);
			f[t]=max(f[t],f[G[t][i]]+1);
			g[t]+=g[G[t][i]];
		  }
}
void DFS(int t,int fa)
{
	int i,sp=0,sq=0,p,q,r,s;
	w[lw=1]=PAIR(0,a[t]);
	for(i=0;i<G[t].size();i++)
		w[++lw]=PAIR(f[G[t][i]]+1,g[G[t][i]]);
	sort(w+1,w+lw+1),p=0;
	for(i=1;i<lw;i++)
		if(p+=w[i].second){
			if(i==lw-1){
				if(w[i+1].first>w[i].first) ans++;
				if(w[i+1].first>w[i].first+1) ans++;
			  }
			else ans+=w[i+1].first-w[i].first;
		  }
	for(i=0;i<G[t].size();i++)
		if(f[G[t][i]]>f[sp]) sq=sp,sp=G[t][i];
		else if(f[G[t][i]]>f[sq]) sq=G[t][i];
	for(i=0;i<G[t].size();i++)
		if(G[t][i]!=fa){
			p=f[t],q=g[t],r=f[G[t][i]],s=g[G[t][i]];
			f[t]=(sp==G[t][i] ? f[sq]+1 : f[t]);
			f[G[t][i]]=max(f[G[t][i]],f[t]+1);
			g[t]-=g[G[t][i]],g[G[t][i]]+=g[t];
			DFS(G[t][i],t);
			f[t]=p,g[t]=q,f[G[t][i]]=r,g[G[t][i]]=s;
		  }
}
int main()
{
	int i,x,y; f[0]=-1;
	scanf("%d",&n);
	for(i=1;i<n;i++){
		scanf("%d %d\n",&x,&y);
		G[x].push_back(y);
		G[y].push_back(x);
	  }
	x=0,y=0;
	for(i=1;i<=n;i++) a[i]=getchar()-'0';
	dfs(1,0);
	DFS(1,0);
	cout<<ans+1;
	return 0;
}
