#include <bits/stdc++.h>
using namespace std;
class Solver{
private:
//Graph
int node_num, edge_num, query_num;
vector<vector<tuple<int, int, bool>>> graph;
//DFS Tree
vector<vector<int>> dfs_tree;
vector<int> root, depth, edge_id, dp, vals;
vector<bool> edge_dir, vis_node, vis_edge;
void build_dfs_tree(int curr){
for (auto [child, edge, dir] : graph[curr]){
if (!vis_node[child]){
depth[child] = depth[curr] + 1;
vis_node[child] = true;
vis_edge[edge] = true;
dfs_tree[curr].push_back(child);
edge_id[child] = edge;
edge_dir[child] = dir;
build_dfs_tree(child);
}
else if (!vis_edge[edge]){
vis_edge[edge] = true;
int u = curr, v = child;
if (depth[u] > depth[v]) swap(u, v);
dp[u]--;
dp[v]++;
}
}
}
void calc_dp(int curr){
for (int child : dfs_tree[curr]) calc_dp(child);
for (int child : dfs_tree[curr]) dp[curr] += dp[child];
}
void update_path(int u, int v){
vals[u]++;
vals[v]--;
}
void sum_up_vals(int curr){
for (int child : dfs_tree[curr]) sum_up_vals(child);
for (int child : dfs_tree[curr]) vals[curr] += vals[child];
}
public:
Solver() {
cin >> node_num >> edge_num;
graph.resize(node_num);
for (int i = 0; i < edge_num; i++){
int u, v;
cin >> u >> v;
u--, v--;
graph[u].push_back({v, i, true});
graph[v].push_back({u, i, false});
}
dfs_tree.resize(node_num);
depth.resize(node_num, 0);
edge_id.resize(node_num, 0);
dp.resize(node_num, 0);
vals.resize(node_num, 0);
edge_dir.resize(node_num);
vis_node.resize(node_num, false);
vis_edge.resize(edge_num, false);
for (int i = 0; i < node_num; i++){
if (!vis_node[i]){
root.push_back(i);
vis_node[i] = true;
build_dfs_tree(i);
}
}
for (int rt : root) calc_dp(rt);
cin >> query_num;
while (query_num--){
int u, v;
cin >> u >> v;
u--, v--;
update_path(u, v);
}
for (int rt : root) sum_up_vals(rt);
vector<char> ans(edge_num, 'B');
for (int i = 0; i < node_num; i++){
if (dp[i] == 0){
char dir = 'B';
if (vals[i] > 0) dir = edge_dir[i] ? 'L' : 'R';
if (vals[i] < 0) dir = edge_dir[i] ? 'R' : 'L';
ans[edge_id[i]] = dir;
}
}
for (char dir : ans) cout << dir;
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
Solver();
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... |