// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>
using namespace std;
#define nl '\n'
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define sz(x) int(x.size())
template<class T> using V = vector<T>;
using vi = V<int>;
using pi = pair<int, int>;
struct DSU {
vi e; void init(int N) { e = vi(N, -1); }
int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); }
bool unite(int x, int y) {
x = get(x), y = get(y); if (x == y) return 0;
e[x] += e[y]; e[y] = x; return 1;
}
};
int main() {
cin.tie(0)->sync_with_stdio(0);
int N, M; cin >> N >> M;
DSU D; D.init(N);
V<V<pi>> adj(N); V<pi> ex, E;
string ans(M, 'B');
for(int i = 0; i < M; i++) {
int u, v; cin >> u >> v; --u, --v;
E.pb(mp(u, v));
if (D.unite(u, v)) adj[u].pb(mp(v, i)), adj[v].pb(mp(u, i));
else ex.pb(mp(u, v));
}
V<pi> par(N); vi dep(N, -1);
function<void(int)> dfs = [&](int u) {
for(auto& v : adj[u]) if (v.f != par[u].f) {
par[v.f] = mp(u, v.s); dep[v.f] = dep[u] + 1; dfs(v.f);
}
};
for(int r = 0; r < N; r++) if (dep[r] == -1) {
par[r] = mp(-1, -1); dep[r] = 0; dfs(r);
}
D.init(N);
for(auto& p : ex) {
auto [u, v] = p;
while(1) {
int a = D.get(u), b = D.get(v);
if (a == b) break;
if (dep[a] < dep[b]) swap(a, b);
assert(par[a].f != -1); D.unite(par[a].f, a);
}
}
// assert(false);
// V<V<pi>> ADJ(N);
// for(int u = 0; u < N; u++) for(auto& v : adj[u]) if (D.get(v.f) != D.get(u)) {
// int a = D.get(u), b = D.get(v.f);
// ADJ[a].pb(mp(b, v.s));
// }
// adj.swap(ADJ);
// par[0] = mp(-1, -1); dep[0] = 0; dfs(0);
vi to(M, -1);
int Q; cin >> Q;
for(int i = 0; i < Q; i++) {
int u, v; cin >> u >> v; --u, --v;
if (D.get(u) == D.get(v)) continue;
// cout << u << " " << v << endl;
while(1) {
int a = D.get(u), b = D.get(v);
// cout << u << " " << v << endl;
// cout << a << " " << b << endl;
if (a == b) break;
if (dep[a] < dep[b]) swap(a, b);
// cout << D.get(u) << " -> " << a << endl;
// change label of edge
to[par[a].s] = (D.get(u) == a ? par[a].f : a);
assert(par[a].f != -1); D.unite(par[a].f, a);
}
}
for(int i = 0; i < M; i++) if (to[i] != -1) {
// cout << to[i] << endl;
ans[i] = (E[i].f == to[i] ? 'L' : 'R');
}
cout << ans << nl;
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
328 KB |
Output is correct |
9 |
Correct |
0 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
328 KB |
Output is correct |
9 |
Correct |
0 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
20 ms |
4848 KB |
Output is correct |
12 |
Correct |
24 ms |
5692 KB |
Output is correct |
13 |
Correct |
30 ms |
7032 KB |
Output is correct |
14 |
Correct |
33 ms |
8872 KB |
Output is correct |
15 |
Correct |
34 ms |
9524 KB |
Output is correct |
16 |
Correct |
39 ms |
10432 KB |
Output is correct |
17 |
Correct |
34 ms |
12332 KB |
Output is correct |
18 |
Correct |
39 ms |
10424 KB |
Output is correct |
19 |
Correct |
41 ms |
13636 KB |
Output is correct |
20 |
Correct |
27 ms |
7040 KB |
Output is correct |
21 |
Correct |
30 ms |
7308 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
328 KB |
Output is correct |
9 |
Correct |
0 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
20 ms |
4848 KB |
Output is correct |
12 |
Correct |
24 ms |
5692 KB |
Output is correct |
13 |
Correct |
30 ms |
7032 KB |
Output is correct |
14 |
Correct |
33 ms |
8872 KB |
Output is correct |
15 |
Correct |
34 ms |
9524 KB |
Output is correct |
16 |
Correct |
39 ms |
10432 KB |
Output is correct |
17 |
Correct |
34 ms |
12332 KB |
Output is correct |
18 |
Correct |
39 ms |
10424 KB |
Output is correct |
19 |
Correct |
41 ms |
13636 KB |
Output is correct |
20 |
Correct |
27 ms |
7040 KB |
Output is correct |
21 |
Correct |
30 ms |
7308 KB |
Output is correct |
22 |
Correct |
49 ms |
13452 KB |
Output is correct |
23 |
Correct |
56 ms |
11492 KB |
Output is correct |
24 |
Correct |
57 ms |
11652 KB |
Output is correct |
25 |
Correct |
52 ms |
16996 KB |
Output is correct |
26 |
Correct |
48 ms |
12984 KB |
Output is correct |
27 |
Correct |
49 ms |
11604 KB |
Output is correct |
28 |
Correct |
20 ms |
3608 KB |
Output is correct |
29 |
Correct |
41 ms |
8208 KB |
Output is correct |
30 |
Correct |
37 ms |
8208 KB |
Output is correct |
31 |
Correct |
42 ms |
8144 KB |
Output is correct |
32 |
Correct |
41 ms |
12404 KB |
Output is correct |