제출 #1259089

#제출 시각아이디문제언어결과실행 시간메모리
1259089maxilOne-Way Streets (CEOI17_oneway)C++20
30 / 100
3097 ms3752 KiB
#include <bits/stdc++.h> using namespace std; int n, m, p; vector<pair<int,int>> edges; vector<pair<int,int>> must; bool check_direction(int fixed_edge, int dir) { // dir = 0: edges[fixed_edge] = a->b // dir = 1: edges[fixed_edge] = b->a // Xây đồ thị có hướng tạm vector<vector<int>> g(n+1); for (int i = 0; i < m; i++) { int u = edges[i].first; int v = edges[i].second; if (i == fixed_edge) { if (dir == 0) g[u].push_back(v); else g[v].push_back(u); } else { // cho cả 2 chiều g[u].push_back(v); g[v].push_back(u); } } // Kiểm tra tất cả cặp (x, y) for (auto [x, y] : must) { vector<int> vis(n+1, 0); queue<int> q; q.push(x); vis[x] = 1; bool ok = false; while (!q.empty()) { int u = q.front(); q.pop(); if (u == y) { ok = true; break; } for (int nxt : g[u]) { if (!vis[nxt]) { vis[nxt] = 1; q.push(nxt); } } } if (!ok) return false; } return true; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; edges.resize(m); for (int i = 0; i < m; i++) { cin >> edges[i].first >> edges[i].second; } cin >> p; must.resize(p); for (int i = 0; i < p; i++) { cin >> must[i].first >> must[i].second; } string ans = ""; for (int i = 0; i < m; i++) { bool okR = check_direction(i, 0); bool okL = check_direction(i, 1); if (okR && okL) ans += 'B'; else if (okR) ans += 'R'; else ans += 'L'; } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...