#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
map< pair<int,int>,int > mp;
vector< pair<int,int> > ds[MAXN],dst[MAXN];
vector<int> sd[MAXN],stp;
int low[MAXN],num[MAXN],ans[MAXN],col[MAXN],root[MAXN],idx[MAXN],pref[MAXN],tdfs=0,cc=0;
pair<int,int> edge[MAXN];
bool ck[MAXN];
void dfs(int i,int pre)
{
low[i]=num[i]=++tdfs;
for(auto v:ds[i])
{
if(v.first==pre) continue;
if(!num[v.first])
{
dfs(v.first,i);
low[i]=min(low[i],low[v.first]);
if(low[v.first]==num[v.first]);
else sd[i].push_back(v.first),sd[v.first].push_back(i),ans[v.second]=-1;
}
else low[i]=min(low[i],num[v.first]),sd[i].push_back(v.first),sd[v.first].push_back(i),ans[v.second]=-1;
}
}
void dfs2(int i)
{
col[i]=cc;
for(auto v:sd[i]) if(!col[v]) dfs2(v);
}
void dfs3(int i,int pre)
{
ck[i]=true;
for(auto v:dst[i]) if(!ck[v.first])
{
idx[v.first]=v.second,root[v.first]=i;
dfs3(v.first,i);
}
}
void dfs4(int i,int pre)
{
for(auto v:dst[i]) if(v.first!=pre)
{
dfs4(v.first,i);
pref[i]+=pref[v.first];
}
if(i!=pre)
{
if(pref[i]<0)
{
if(col[edge[idx[i]].second]==i) ans[idx[i]]=0;
else ans[idx[i]]=1;
}
if(pref[i]>0)
{
if(col[edge[idx[i]].second]==i) ans[idx[i]]=1;
else ans[idx[i]]=0;
}
if(pref[i]==0) ans[idx[i]]=-1;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m,q;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int l,r;
cin>>l>>r;
edge[i]={l,r};
if(l>r) swap(l,r);
ds[l].push_back({r,i}),ds[r].push_back({l,i});
if(mp[{l,r}]) ans[i]=ans[mp[{l,r}]]=-1;
mp[{l,r}]=i;
}
for(int i=1;i<=n;i++) if(!num[i]) dfs(i,i);
for(int i=1;i<=n;i++) if(!col[i])
{
cc++;
dfs2(i);
}
for(int i=1;i<=m;i++) if(col[edge[i].first]!=col[edge[i].second])
{
dst[col[edge[i].first]].push_back({col[edge[i].second],i});
dst[col[edge[i].second]].push_back({col[edge[i].first],i});
}
for(int i=1;i<=cc;i++) if(!ck[i])
{
dfs3(i,i);
stp.push_back(i);
}
cin>>q;
while(q--)
{
int x,y;
cin>>x>>y;
pref[x=col[x]]++,pref[y=col[y]]--;
}
for(auto v:stp) dfs4(v,v);
for(int i=1;i<=m;i++) if(ans[i]==-1) cout<<"B";
else if(ans[i]==1) cout<<"L";
else cout<<"R";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |