rt,神秘代码增大min中inf会造成wa不同的点。 这个版本分最高,94,wa on #9
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
string s[301100];
ll rt[1130];
char j[301100];
struct z{
ll dx;
char zf;
}jd[301100];
ll cnt=0;
vector<ll> v[301100];
void dfs(ll now,ll qzdx,ll l,ll r){
//cout<<now<<" "<<jd[now].zf<<endl;
if(qzdx>r)return;
if(jd[now].zf!='*'){
if(qzdx>=l)cout<<jd[now].zf;
return;
}
for(ll i=0;i<v[now].size();i++){
qzdx+=jd[v[now][i]].dx;
//cout<<v[now][i]<<endl;
if(qzdx>=l&&qzdx-jd[v[now][i]].dx<=r)dfs(v[now][i],qzdx-jd[v[now][i]].dx,l,r);
}
return;
}
int main(){
ll l,r;
cin>>l>>r>>n;
for(ll i=1;i<=n;i++)cin>>j[i]>>s[i];
for(ll i=0;i<=int('z'-'a');i++){
cnt++;
jd[cnt].zf=char(i+'a');
jd[cnt].dx=1;
rt[i]=cnt;
}
for(ll i=n;i>=1;i--){
if(s[i].size()==1){
rt[j[i]-'a']=rt[s[i][0]-'a'];
continue;
}
cnt++;
for(ll o=0;o<s[i].size();o++){
v[cnt].push_back(rt[s[i][o]-'a']);
jd[cnt].dx=min(jd[rt[s[i][o]-'a']].dx+jd[cnt].dx,1000000000000000000ll);
}
jd[cnt].zf='*';
rt[j[i]-'a']=cnt;
}
dfs(rt[0],1,l,r);
return 0;
}