Submission #585034

#TimeUsernameProblemLanguageResultExecution timeMemory
585034tengiz05One-Way Streets (CEOI17_oneway)C++17
0 / 100
1 ms452 KiB
#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 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...