#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int ri()
{
	register int x=0;register bool f=0;register char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')f=1;ch=getchar();}
	while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();};
	return f?-x:x;
}
void wi(int x)
{
	if(x<0)	x=-x,putchar('-');
	if(x>9)	wi(x/10);
	putchar('0'+x%10);
}
const int N=1e5+7;
int f[N][2],head[N],to[N<<1],nxt[N<<1],val[N],fa[N],cnt[N],ans,st,maxdp=-1e9;
char str[N];
inline void ade(int x,int y)
{
	nxt[++nxt[0]]=head[x];
	head[x]=nxt[0];
	to[nxt[0]]=y;
}
void dfs(int x)
{
	cnt[x]=val[x];
	for(int now=head[x];now;now=nxt[now])
	{
		if(to[now]==fa[x])	continue;
		fa[to[now]]=x;dfs(to[now]);
		cnt[x]+=cnt[to[now]];
	}
	if(!st&&cnt[x]==1)	st=x;
}
void dfs2(int x)
{
	for(int now=head[x];now;now=nxt[now])
	{
		if(to[now]==fa[x]||!cnt[to[now]])	continue;
		ans++;val[to[now]]^=1;dfs2(to[now]);
		ans++;val[x]^=1;
	}
}
void dp(int x)
{
	f[x][0]=f[x][1]=val[x];
	int mx1=-1e9,mx2=-1e9;
	for(int now=head[x];now;now=nxt[now])
	{
		if(to[now]==fa[x]||!cnt[to[now]])	continue;
		dp(to[now]);
		if(f[to[now]][1]>mx1)	mx2=mx1,mx1=f[to[now]][1];
		else	if(f[to[now]][1]>mx2)	mx2=f[to[now]][1];
	}
	if(mx1>0)	f[x][1]+=mx1,f[x][0]+=mx1;
	if(mx2>0)	f[x][0]+=mx2;
	maxdp=max(maxdp,f[x][0]);
}
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int n=ri(),i,x,y;
	for(i=1;i<n;i++)
	{
		x=ri(),y=ri();
		ade(x,y);ade(y,x);
	}
	scanf("%s",str+1);
	for(i=1;i<=n;i++)	val[i]=str[i]=='W';
	dfs(1);
	fa[st]=0;dfs(st);
	dfs2(st);
	for(i=1;i<=n;i++)
		if(val[i])	ans++,val[i]=2;
//	printf("ans=%d\n",ans);
	dp(st);
//	for(i=1;i<=n;i++)
//		printf("i=%d f0=%d f1=%d\n",i,f[i][0],f[i][1]);
	int opt=ans-maxdp;
	if(opt==-1)	opt=1;
	wi(opt);putchar('\n');
	return 0;
}
