Submission #1223727

#TimeUsernameProblemLanguageResultExecution timeMemory
1223727VMaksimoski008One-Way Streets (CEOI17_oneway)C++17
0 / 100
2 ms3392 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;

int n, m, in[N], low[N], timer = 1, sum[N], q, b[N], c[N];
vector<array<int, 2> > g[N], edg(N);

void dfs(int u, int p) {
    in[u] = low[u] = timer++;
    for(auto [v, id] : g[u]) {
        if(p == id) continue;
        if(in[v]) {
            low[u] = min(low[u], in[v]);
        } else {
            dfs(v, id);
            low[u] = min(low[u], low[v]);
            if(low[v] > in[u]) b[id] = 1;

            if(sum[v] == 0) c[id] = 0;
            else if(sum[v] > 0) c[id] = 1;
            else c[id] = -1;

            if(edg[id][0] == u) c[id] *= 1;
            else c[id] *= -1;

            sum[u] += sum[v];
        }
    }
}

signed main() {
    cin >> n >> m;
    for(int i=1; i<=m; i++) {
        int u, v; cin >> u >> v;
        g[u].push_back({ v, i });
        g[v].push_back({ u, i });
        edg[i] = { u, v };
    }

    cin >> q;
    while(q--) {
        int u, v; cin >> u >> v;
        sum[u]++;
        sum[v]--;
    }

    for(int i=1; i<=n; i++)
        if(!in[i]) dfs(i, -1);

    for(int i=1; i<=m; i++) {
        if(!b[i]) cout << 'B';
        else cout << (c[i] == 1 ? 'L' : 'R');
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...