#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
#define st first
#define nd second
#define f(a, c, b) for (int a = c; b > a; a++)
#define pb push_back
#define all(a) a.begin(), a.end()
#define sz(a) int(a.size())
#define int ll
#define DUZO 1000000000000000000
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vvi = vector<vector<int>>;
vector<pii> kr;
set<pii> musi;
set<pii> kr_musi;
vvi g;
vi dp;
vi pre;
vvi nie_mosty;
vector<pii> mosty;
vi na_cyklu;
vi odw;
vvi g_dw;
vi nr_dw;
int lnk = 1;
int t;
int nowy(int v, int ind) {
if (kr[ind].st != v) return kr[ind].st;
else return kr[ind].nd;
}
void dfs(int v, int p) {
pre[v] = dp[v] = t;
odw[v] = 1;
t++;
for (int ind: g[v]) {
if (ind == p) continue;
int u = nowy(v, ind);
if (!odw[u]) {
dfs(u, ind);
dp[v] = min(dp[v], dp[u]);
} else {
dp[v] = min(dp[v], pre[u]);
}
if (pre[v] < pre[u]) {
if (dp[u] <= pre[v]) {
nie_mosty[u].pb(ind);
nie_mosty[v].pb(ind);
} else {
mosty.pb({u, v});
}
}
}
}
void dfs_nm(int v) {
nr_dw[v] = lnk;
for (int ind: nie_mosty[v]) {
int u = nowy(v, ind);
if (nr_dw[u]) continue;
dfs_nm(u);
}
}
void dfs_dw(int v, int p) {
for (int u: g_dw[v]) {
if (u == p) continue;
dfs_dw(u, v);
if (dp[u] > 0) {
musi.insert({u, v});
} else if (dp[u] < 0) {
musi.insert({v, u});
}
dp[v] += dp[u];
}
}
void solve() {
int n, m;
cin >> n >> m;
kr.resize(m);
g.resize(n + 1);
f(i, 0, m) {
int u, v;
cin >> u >> v;
kr[i] = {u, v};
g[u].pb(i);
g[v].pb(i);
}
pre.resize(n + 1);
t = 0;
dp.resize(n + 1);
odw.resize(n + 1);
nie_mosty = {};
nie_mosty.resize(n + 1);
dfs(1, -1);
nr_dw.resize(n + 1, 0);
f(i, 1, n + 1) {
if (nr_dw[i]) continue;
dfs_nm(i);
lnk++;
}
g_dw.resize(lnk);
for (auto [c, d]: mosty) {
int u = nr_dw[c];
int v = nr_dw[d];
g_dw[u].pb(v);
g_dw[v].pb(u);
}
f(i, 1, lnk) {
dp[i] = 0;
}
int q;
cin >> q;
f(i, 0, q) {
int u, v;
cin >> u >> v;
u = nr_dw[u];
v = nr_dw[v];
dp[u]++;
dp[v]--;
}
/*cout << "a\n";
f(i, 1, sz(g_dw)) {
cout << "wierzcholek " << i << " sasiedzi to: ";
for (int ele: g_dw[i]) {
cout << ele << " ";
}
cout << "\n";
}*/
dfs_dw(1, 0);
/*for (pii ele: musi) {
cout << ele.st << " " << ele.nd << "\n";
}*/
for (auto [c, d]: mosty) {
int u = nr_dw[c];
int v = nr_dw[d];
if (musi.count({v, u})) {
kr_musi.insert({d, c});
} else if (musi.count({u, v})) {
kr_musi.insert({c, d});
}
}
for (auto [u, v]: kr) {
if (kr_musi.count({u, v})) {
cout<< "R";
} else if (kr_musi.count({v, u})) {
cout << "L";
} else {
cout << "B";
}
}
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int q = 1;
//cin >> q;
while (q--) solve();
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... |