rt,感觉处理不好就很容易RE,但是我的代码在n=100的时候光预处理就RE了。
void dfsgr(int u,int l,int r){
bool flag=1;
for(int i=l;i<=r;i++){
if(!(s[i]>='0'&&s[i]<='9')){
flag=0;
break;
}
}
if(flag){
nd[u]=stoi(s.substr(l,r-l+1));
return ;
}
int tp=1,fpos;
for(int i=l;i<=r;i++){
if(s[i]=='>'||s[i]=='<'){
ch[u]=s[i];
fpos=i+1;
}else if(s[i]=='?'){
nd[u]=stoi(s.substr(fpos,i-fpos));
fpos=i+1;
break;
}
}
for(int i=fpos;i<=r;i++){
if(s[i]=='?'){
tp++;
}
if(s[i]==':'){
if(--tp==0){
dfsgr(tl[u]=++cnt,fpos,i-1);
dfsgr(tr[u]=++cnt,i+1,r);
}
}
}
}