#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(),v.end()
#define eb push_back
#define ll long long 
#define fi first
#define se second
int t,n,i,m,j,u,v,co,qr;
const int maxn = 3e5 + 10,maxv = 20;
int tim[maxn],low[maxn],id[maxn],p[maxn][maxv],de[maxn],ans[maxn],suma[maxn],sumb[maxn];
struct bruh
{
  int o,oo,ooo;
};
vector<bruh> a[maxn],tree[maxn];
stack<int> st;
bool e[maxn],f[maxn],g[maxn];
void dfs(int i,int p)
{
  tim[i] = low[i] = ++t;
  bool through = 0;
  st.push(i);
  for(auto [k,idx,ch] : a[i])
  {
    if(k == p && !through)
    {
      through = 1;
      continue;
    }
    if(tim[k])low[i] = min(low[i],tim[k]);
    else
    {
      dfs(k,i);
      low[i] = min(low[i],low[k]);
    }
  }
  if(low[i] == tim[i])
  {
    co++;
    while(st.top() != i)
    {
      id[st.top()] = co;
      st.pop();
    }
    id[st.top()] = co;
    st.pop();
  }
}
void cal(int i,int pa)
{
  e[i] = 1;
  for(auto [k,idx,ch] : a[i])
  {
    if(k == pa)continue;
    if(!e[k])
    {
      cal(k,i);
      if(low[k] > tim[i] && id[i] != id[k])
      {
        tree[id[i]].eb({id[k],idx,ch});
        tree[id[k]].eb({id[i],idx,3 - ch});
        // cout<<id[i]<<' '<<id[k]<<'\n';
      }
    }
  }
}
void bfs(int i,int pa)
{
  f[i] = 1;
  de[i] = de[pa]+1;
  for(auto [k,idx,ch] : tree[i])
  {
    if(k == pa||f[k])continue;
    
    bfs(k,i);
    p[k][0] = i;
  }
}
int lift(int i,int tmp)
{
  for(int j = 0;j<maxv;j++)
  {
    if((tmp>>j)&1)i = p[i][j];
  }
  return i;
}
int lca(int u,int v)
{
  if(de[u] < de[v])swap(u,v);
  u = lift(u,de[u] - de[v]);
  if(u == v)return u;
  for(int j = maxv-1;j>=0;j--)
  {
    if(p[u][j] != p[v][j])
    {
      u = p[u][j];
      v = p[v][j];
    }
  }
  return p[u][0];
}
void solve(int i,int pa)
{
  g[i] = 1;
  for(auto [k,idx,ch] : tree[i])
  {
    if(k == pa||g[k])continue;
    
    solve(k,i);
    suma[i]+= suma[k];
    sumb[i]+= sumb[k];
    
    if(suma[k] > 0)ans[idx] = 3 - ch;
    if(sumb[k] > 0)ans[idx] = ch;
  }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    cin>>n>>m;
    for(i = 0;i<m;i++)
    {
      cin>>u>>v;
      a[u].eb({v,i,1});
      a[v].eb({u,i,2});
    }
    for(i = 1;i<=n;i++)
    {
      if(!tim[i])dfs(i,0);
    }
    
    for(i = 1;i<=n;i++)
    {
      if(!e[i])cal(i,0);
    }
    
    for(i = 1;i<=co;i++)
    {
      if(!f[i])bfs(i,0);
    }
    
    for(j = 1;j<maxv;j++)
    {
      for(i = 1;i<=co;i++)
      {
        p[i][j] = p[p[i][j-1]][j-1];
      }
    }
    // for(i = 1;i<=n;i++)cout<<id[i]<<' ';
    
    cin>>qr;
    while(qr--)
    {
      cin>>u>>v;
      u = id[u];
      v = id[v];
      int lc = lca(u,v);
      suma[u]++;
      suma[lc]--;
      sumb[v]++;
      sumb[lc]--;
    }
    
    for(i = 1;i<=co;i++)
    {
      if(!g[i])solve(i,0);
    }
    
    for(i = 0;i<m;i++)
    {
      if(ans[i] == 1)cout<<'R';
      else if(ans[i] == 2)cout<<'L';
      else cout<<'B';
    }
    
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |