#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(),v.end()
#define pb push_back
#define ll long long
#define ld long double
#define fi first
#define se second
#define mk make_pair
typedef pair<int,int> pii;
const int maxn = 1e5 + 10;
vector<pii> adj[maxn],com_adj[maxn];
int i,n,t,m,com_cnt,u,v;
int com[maxn],low[maxn],tim[maxn];
int dp[maxn];
char ans[maxn];
stack<int> st;
void dfs(int i,int pa)
{
low[i] = tim[i] = ++t;
st.push(i);
bool through = 0;
for(pii k : adj[i])
{
if(k.fi == pa && !through)
{
through = 1;
continue;
}
if(tim[k.fi])low[i] = min(low[i],tim[k.fi]);
else
{
dfs(k.fi,i);
low[i] = min(low[i],low[k.fi]);
}
}
if(low[i] == tim[i])
{
++com_cnt;
while(st.top() != i)
{
com[st.top()] = com_cnt;
st.pop();
}
com[st.top()] = com_cnt;
st.pop();
}
}
bool c[maxn];
void cal(int i,int pa)
{
c[i] = 1;
for(pii k : com_adj[i])
{
if(k.fi == pa)continue;
cal(k.fi,i);
dp[i] += dp[k.fi];
dp[k.fi] *= k.se / abs(k.se);
if(dp[k.fi] == 0)ans[abs(k.se)] = 'B';
if(dp[k.fi] < 0)ans[abs(k.se)] = 'R';
if(dp[k.fi] > 0)ans[abs(k.se)] = 'L';
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(i = 1;i<=m;i++)
{
cin>>u>>v;
adj[u].pb(mk(v,i));
adj[v].pb(mk(u,-i));
}
for(i = 1;i<=n;i++)
{
if(!tim[i])dfs(i,0);
}
for(i = 1;i<=n;i++)
{
for(pii k : adj[i])
{
if(com[i] != com[k.fi])com_adj[com[i]].pb(mk(com[k.fi],k.se));
else ans[abs(k.se)] = 'B';
}
}
cin>>t;
while(t--)
{
cin>>u>>v;
u = com[u];
v = com[v];
dp[u]++;
dp[v]--;
}
for(i = 1;i<=com_cnt;i++)
{
if(!c[i])cal(i,0);
}
for(i = 1;i<=m;i++)cout<<ans[i];
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... |