Submission #1283343

#TimeUsernameProblemLanguageResultExecution timeMemory
1283343Jawad_Akbar_JJOne-Way Streets (CEOI17_oneway)C++20
0 / 100
1 ms332 KiB
#include <iostream> #include <vector> using namespace std; const int N = 1<<17; vector<pair<int,int>> nei[N]; int hei[N], par[N][20], seen[N], cyc[N], Down[N], Up[N], Ans[N]; void dfs(int u, int p){ hei[u] = hei[p] + 1, seen[u] = 1, par[u][0] = p; for (int i=1;i<17;i++) par[u][i] = par[par[u][i-1]][i]; for (auto [i, id] : nei[u]){ if (seen[i] == 1) continue; dfs(i, u); } } void dfs2(int u, int ind){ seen[u] = 2; for (auto [i, id] : nei[u]){ if (id == -ind) continue; if (seen[i] == 2){ Ans[abs(id)] = 'B'; cyc[u]++; cyc[i]--; } else{ dfs2(i, id); Up[u] += Up[i]; Down[u] += Down[i]; cyc[u] += cyc[i]; } } if (cyc[u] or Up[u] + Down[u] == 0) Ans[abs(ind)] = 'B'; else if ((Up[u] > 0) == (ind < 0)) Ans[abs(ind)] = 'R'; else Ans[abs(ind)] = 'L'; } int Lca(int u, int v){ if (hei[u] > hei[v]) swap(u, v); for (int i=17;i>=0;i--) if (hei[u] + (1<<i) <= hei[v]) v = par[v][i]; if (v == u) return u; for (int i=17;i>=0;i--) if (par[u][i] != par[v][i]) u = par[u][i], v = par[v][i]; return par[u][0]; } int main(){ int n, m, q; cin>>n>>m; for (int i=1, a, b;i<=m;i++){ cin>>a>>b; nei[a].push_back({b, i}); nei[b].push_back({a, -i}); } dfs(1, 0); cin>>q; for (int i=1, A, B;i<=q;i++){ cin>>A>>B; int lca = Lca(A, B); Up[A]++, Down[B]++, Up[lca]--, Down[lca]--; } dfs2(1, 0); for (int i=1;i<=m;i++) cout<<char(Ans[i]); cout<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...