#include<bits/stdc++.h>
#define pi 3.1415926535897932384626
using namespace std;
      
struct P{
  int x,y;
  bool operator < (const P &a )const{
    //if(x!=a.x)
    return y<a.y;
  };
};

int a,b,c,d,i,k,n,m,e[100101],dx[10]={1,0,-1,0,1,1,-1,-1},dy[10]={0,1,0,-1,1,-1,1,-1};
int o[100101][4];
int l[100101];
int j[100101];


long long x,y,z,mod=1000000007;
//string r;
char r[100102];

P u[1];
queue<int> q;
stack<int> s;
//set<P> s;
map<int,int> p;

vector<int> v[100101];

bool as(P a,P b)
{
  //if(a.x!=b.x)
  return a.x<b.x;
  //return a.z<b.z;
}

int f(int n,int m,int p)
{
  if(o[n][m]>-mod) return o[n][m];
  int k=0;
  for(int h=0;h<v[n].size();h++)
    if(l[v[n][h]]) k++,k%=2;
  if(m==0)
  {
    k=(k+j[n])%2;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k+=f(v[n][h],m,n);
    return o[n][m]=k;
  }
  if(m==1)
  {
    k=(k+j[n]+1)%2;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k+=f(v[n][h],0,n);
    int c=k;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k=min(c-f(v[n][h],0,n)-1+f(v[n][h],1,n),k);
    return o[n][m]=k;
  }
  if(m==2)
  {
    k=(k+j[n])%2;
    int e=k;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k+=f(v[n][h],0,n);
    int c=k;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k=min(c-f(v[n][h],0,n)-1+f(v[n][h],2,n)-e+(e+1)%2,k);
    return o[n][m]=k;
  }
  k=(k+j[n])%2;
    int e=k;
    for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
      k+=f(v[n][h],0,n);
    int c=k;
  for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
    {
      //k=min(c-f(v[n][h],0,n)-1+f(v[n][h],1,n),k);
      //printf("%d\n",f(v[n][h],1,n));
      k=min(k,c-f(v[n][h],0,n)+f(v[n][h],3,n));
    }
  k=min(k,f(n,2,p));
  
  int x1=0,x2=0,y1=mod,y2=mod,x3=0,x4=0,y4=mod,y3=mod;
  
  for(int h=0;h<v[n].size();h++)
    if(v[n][h]!=p&&l[v[n][h]])
  {
    int y=-f(v[n][h],0,n)+f(v[n][h],1,n)-1;
    if(y<=y1) y2=y1,x2=x1,y1=y,x1=v[n][h];
    else if(y<y2) y2=y,x2=v[n][h];
    
    y=-f(v[n][h],0,n)+f(v[n][h],2,n)-e+(e+1)%2-1;
    if(y<=y3) y4=y3,x4=x3,y3=y,x3=v[n][h];
    else if(y<y4) y4=y,x4=v[n][h];
    
  }
  //if(n==1)
  //printf("%d %d %d %d %d %d %d %d %d %d\n",x1,x2,x3,x4,y1,y2,y3,y4,c,k);
  if(x2==0) return o[n][m]=k;
  if(x1!=x3) k=min(k,c+y1+y3);
  else k=min(k,min(c+y1+y4,c+y2+y3));
  return o[n][m]=k;
}

int main()
{
  //memset(o,-1,sizeof(o));
  scanf("%d",&a);
  for(int t=1;t<=a;t++)
    for(int h=0;h<4;h++)
      o[t][h]=-mod;
  for(int t=1;t<a;t++)
  {
    scanf("%d %d",&n,&m);
    v[n].push_back(m);
    v[m].push_back(n);
  }
  scanf("%s",r+1);
  for(int t=1;t<=a;t++)
    if(r[t]=='W') d++,j[t]=1;
  if(d<=1)
  {
    printf("%d",d);
    return 0;
  }
  for(int t=1;t<=a;t++)
  if(v[t].size()==1&&j[t]==0)
    q.push(t);
  memset(l,-1,sizeof(l));
  for(;q.size();q.pop())
  {
    l[q.front()]=0;
    for(int h=0;h<v[q.front()].size();h++)
    if(l[v[q.front()][h]]&&j[v[q.front()][h]]==0)
    {
      e[v[q.front()][h]]++;
      if(e[v[q.front()][h]]+1==v[v[q.front()][h]].size()) q.push(v[q.front()][h]);
    }
  }
  for(int t=1;t<=a;t++)
    if(l[t])
    for(int h=0;h<v[t].size();h++)
      if(l[v[t][h]]) c++;
  for(int t=1;t<=a;t++)
  if(l[t])
  {
    printf("%d",f(t,3,0)+c);
    return 0;
  }
}
//0
//13
//18



Measured memory_bytes: 19328