#include <bits/stdc++.h>

using namespace std;

const int N=2e5+10;


typedef pair<int,int> ii;

#define X first
#define Y second

int n,w[N];
vector <int> v[N];
int q[N],pa[N];

void BFS(){
        int top=1,bot=1;
        q[1]=1;
        while (top<=bot){
                int x=q[top++];
                for(auto y:v[x]) if (y!=pa[x]){
                        pa[y]=x;
                        q[++bot]=y;
                }
        }
}


bool minimize(int &x,int y){
        if (x>y) x=y;else return 0;
        return 1;
}

int f[N][2][2];
int g[2][2];


int pref[N][2][2];
int psumf[2][N][2][2];
int sub[N];



const int inf=1e9+10;

ii combine(int xcol,int retx,int y,int ycol,int rety){
        ycol^=1;
        ///not right
        if (w[y]^ycol) return ii(-1,-1);
        ///no need but oh well
        if (!retx&&!rety) return ii(-1,-1);
        ii st_res=ii(xcol^rety,rety&retx);
        return st_res;
}
void merge(int cf[][2],int y,int empt,int nf[][2],int g[][2]){
        if (empt){
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) g[xcol][ret]=cf[xcol][ret];
                return;
        }
        for(int xcol=0;xcol<=1;xcol++)
                for(int ret=0;ret<=1;ret++) g[xcol][ret]=inf;
        for(int xcol=0;xcol<=1;xcol++)
                for(int ret=0;ret<=1;ret++) 
                        for(int xcol_y=0;xcol_y<=1;xcol_y++)
                                for(int rety=1-ret;rety<=1;rety++){
                                        int res=cf[xcol][ret]+nf[xcol_y][rety]+1+rety;
                                        ii next_st=combine(xcol,ret,y,xcol_y,rety);
                                        if (next_st.X==-1) continue;
                                        minimize(g[next_st.X][next_st.Y],res);
                                }
}
int solve(){

        BFS();
        for(int i=n;i>=1;i--){
                sub[q[i]]+=w[q[i]];
                sub[pa[q[i]]]+=sub[q[i]];
        }
        for(int i=n;i>=1;i--){
                int x=q[i];
                for(int xcol=0;xcol<=1;xcol++)
                        for(int j=0;j<=1;j++) f[x][xcol][j]=xcol;
                for(auto y:v[x]) if (y!=pa[x]){
                        merge(f[x],y,sub[y]==0,f[y],g);
                        for(int xcol=0;xcol<=1;xcol++)
                                for(int ret=0;ret<=1;ret++) f[x][xcol][ret]=g[xcol][ret];
                }
                /*
                cout<<x<<'\n';
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) cout<<f[x][xcol][ret]<<" \n"[ret==1];
                        */
        }
        int ans=inf;
        int all=count(w+1,w+n+1,1);
        for(int i=1;i<=n;i++){
                int x=q[i];
                int n1=v[x].size();
                ///flip or not ?
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) psumf[0][0][xcol][ret]=psumf[1][n1+1][xcol][ret]=xcol;
                for(int j=1;j<=n1;j++){
                        int y=v[x][j-1];
                        if (y==pa[x]) merge(psumf[0][j-1],y,(all-sub[x]==0),pref[x],psumf[0][j]);
                        else merge(psumf[0][j-1],y,(sub[y]==0),f[y],psumf[0][j]);
                }
                for(int j=n1;j>=1;j--){
                        int y=v[x][j-1];
                        if (y==pa[x]) merge(psumf[1][j+1],y,(all-sub[x]==0),pref[x],psumf[1][j]);
                        else merge(psumf[1][j+1],y,(sub[y]==0),f[y],psumf[1][j]);
                }
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) f[x][xcol][ret]=psumf[0][n1][xcol][ret];
                for(int ret=0;ret<=1;ret++)
                        minimize(ans,psumf[0][n1][w[x]][ret]);
                for(int j=1;j<=n1;j++){
                        int y=v[x][j-1];
                        if (y!=pa[x]){
                                for(int xcol=0;xcol<=1;xcol++)
                                        for(int ret=0;ret<=1;ret++) pref[y][xcol][ret]=inf;
                                for(int xcoll=0;xcoll<=1;xcoll++)
                                        for(int xcolr=0;xcolr<=1;xcolr++)
                                                for(int retl=0;retl<=1;retl++)
                                                        for(int retr=0;retr<=1;retr++){
                                                                if (!retl&&!retr) continue;
                                                                int res=psumf[0][j-1][xcoll][retl]+psumf[1][j+1][xcolr][retr];
                                                                minimize(pref[y][xcoll^xcolr][retl&retr],res);
                                                        }
                        }
                }
                
        }
        /*
        for(int i=1;i<=n;i++){
                cout<<i<<'\n';
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) cout<<f[i][xcol][ret]<<" \n"[ret==1]; 
                for(int xcol=0;xcol<=1;xcol++)
                        for(int ret=0;ret<=1;ret++) cout<<pref[i][xcol][ret]<<" \n"[ret==1]; 
        }
        */
        return ans;
}
void prepare(){
        cin>>n;
        for(int i=1;i<n;i++){
                int x,y;
                cin>>x>>y;
                v[x].push_back(y);
                v[y].push_back(x);
        }
        string s;
        cin>>s;
        for(int i=0;i<n;i++) w[i+1]=(s[i]=='W');
}
int main(){
        prepare();
        cout<<solve();
}


Measured memory_bytes: 23544