rt,WA #7#8,不明白错在哪,希望能指出错误或提供hack,下面是代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10,logn=50;
int n,u,v,f[maxn][logn],sh[maxn],sg[maxn],d[maxn],m;
string s;
char c;
vector<int>g[maxn];
void dfs(int x,int fa){
d[x]=d[fa]+1,f[x][0]=fa;
sh[x]=sh[fa]+(s[x-1]=='H'),sg[x]=sg[fa]+(s[x-1]=='G');
for(int i=1;i<logn;i++)
f[x][i]=f[f[x][i-1]][i-1];
for(int i=0;i<g[x].size();i++){
int to=g[x][i];
if(to==fa)
continue;
dfs(to,x);
}
}
int lca(int u,int v){
if(d[u]>d[v])
swap(u,v);
int dep=d[v]-d[u];
for(int i=0;dep;i++,dep>>=1)
if(dep&1)
v=f[v][i];
if(u==v)
return u;
for(int i=30;i>=0;i--)
if(f[u][i]!=f[v][i])
u=f[u][i],v=f[u][v];
return f[u][0];
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>m>>s;
for(int i=1;i<n;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,0);
while(m--){
cin>>u>>v>>c;
int l=lca(u,v),p;
if(c=='H')
p=(sh[u]+sh[v]-sh[l]-sh[f[l][0]]>0);
if(c=='G')
p=(sg[u]+sg[v]-sg[l]-sg[f[l][0]]>0);
cout<<p;
}
return 0;
}