#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int n;
vector<int>G[100010];
int par[100010];
int deg[100010];
int dp[100010];
char buf[100010];
bool del[100010];
int nd[100010];
int cnt;
int sb;
int ans;
void dfs(int x,int p)
{
	for(int i=0;i<G[x].size();i++)
	{
		int y=G[x][i];
		if(y==p)continue;
		par[y]=x;
		deg[x]++;
		dfs(y,x);
	}
}
void solve(int x,int p)
{
	int mx1=-1e9,mx2=-1e9;
	for(int i=0;i<G[x].size();i++)
	{
		int y=G[x][i];
		if(y==p || del[y])continue;
		solve(y,x);
		if(dp[y]>mx1)mx2=mx1,mx1=dp[y];
		else if(dp[y]>mx2)mx2=dp[y];
	}
	dp[x]=max(dp[x],mx1+nd[x]);
	ans=max(ans,max(mx1+mx2+nd[x],mx1+nd[x]));
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		G[x].push_back(y);
		G[y].push_back(x);
	}
	scanf("%s",buf+1);
	int rt=0;
	for(int i=1;i<=n;i++)
	{
		if(buf[i]=='W')
		{
			rt=i;
			break;
		}
	}
	if(!rt)
	{
		printf("0");
		return 0;
	}
	dfs(rt,0);
	queue<int>q;
	cnt=n-1;
	for(int i=1;i<=n;i++)if(!deg[i])q.push(i);
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		if(buf[x]=='B')
		{
			del[x]=true;
			cnt--;
			deg[par[x]]--;
			if(!deg[par[x]])q.push(par[x]); 
		}
	}
	cnt*=2;
	for(int i=1;i<=n;i++)
	{
		if(del[i])continue;
		int s=0;
		for(int j=0;j<G[i].size();j++)s+=(!del[G[i][j]]);
		if((buf[i]=='W' && !(s&1)) || (buf[i]=='B' && (s&1)))nd[i]=2,cnt++;
	}
	solve(rt,0);
	printf("%d",cnt-ans);
	return 0;
}