답안 #585034

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
585034 2022-06-28T09:13:34 Z tengiz05 One-Way Streets (CEOI17_oneway) C++17
0 / 100
1 ms 452 KB
#include <bits/stdc++.h>

using i64 = long long;
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;
    
    vector<vector<int>> adj(n);
    vector<vector<pair<int, int>>> ADJ(n);
    
    map<pair<int, int>, int> id, ID;
    
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        u--;
        v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
        ADJ[u].emplace_back(v, 0);
        ADJ[v].emplace_back(u, 1);
        ID[minmax(u, v)] = i;
    }
    
    vector<int> in(n), f(n), c(n);
    
    int timeStamp = 0;
    
    vector<bool> vis(n);
    
    function<void(int, int)> dfs = [&](int u, int p) {
        in[u] = f[u] = c[u] = timeStamp++;
        vis[u] = true;
        for (int v : adj[u]) {
            if (!vis[v]) {
                dfs(v, u);
                if (f[v] <= in[u]) {
                    c[u] = c[v];
                }
                f[u] = min(f[u], f[v]);
            } else if (v != p) {
                f[u] = min(f[u], f[v]);
            }
        }
    };
    
    for (int i = 0; i < n; i++) {
        if (!vis[i]) {
            dfs(i, -1);
        }
    }
    
    // for (int i = 0; i < n; i++) {
        // cout << c[i] << " \n"[i == n - 1];
    // }
    
    vector<vector<pair<int, int>>> e(n);
    for (int u = 0; u < n; u++) {
        for (auto [v, x] : ADJ[u]) {
            if (c[u] != c[v]) {
                e[c[u]].emplace_back(c[v], x);
                id[minmax(c[u], c[v])] = ID[minmax(u, v)];
                // cerr << c[u] << " : " << c[v]  << "\n";
            }
        }
    }
    
    vector<vector<int>> ev(n);
    
    int p;
    cin >> p;
    
    vector<int> U(p + 1), V(p + 1);
    
    for (int i = 1; i <= p; i++) {
        int u, v;
        cin >> u >> v;
        u--;
        v--;
        if (c[u] == c[v])
            continue;
        ev[c[u]].push_back(i);
        ev[c[v]].push_back(-i);
    }
    
    vector<int> ans(m, -1);
    
    vis.assign(n, 0);
    
    set<int> s[n];
    
    function<void(int, int, int)> dfs2 = [&](int u, int p, int d) {
        vis[u] = true;
        for (int x : ev[u]) {
            s[u].insert(x);
        }
        for (auto [v, x] : e[u]) {
            if (vis[v]) assert(v == p);
            if (!vis[v]) {
                dfs2(v, u, x);
                for (int g : s[v]) {
                    if (s[u].count(-g)) {
                        s[u].erase(g);
                    } else {
                        s[u].insert(g);
                    }
                }
            }
        }
        if (p != -1 && !s[u].empty()) {
            ans[id[minmax(p, u)]] = d ^ (*s[u].begin() > 0);
        }
    };
    
    for (int i = 0; i < n; i++) {
        if (!vis[i]) {
            dfs2(i, -1, -1);
        }
    }
    
    for (int i = 0; i < m; i++) {
        if (ans[i] == 0) {
            cout << "R";
        } else if (ans[i] == 1) {
            cout << "L";
        } else {
            cout << "B";
        }
    }
    
    return 0;
}
/*

5 6
1 2
1 2
4 3
2 3
1 3
5 1
2
4 5
1 3

*/
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Runtime error 1 ms 452 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Runtime error 1 ms 452 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Runtime error 1 ms 452 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -