Submission #1005818

#TimeUsernameProblemLanguageResultExecution timeMemory
1005818SulAOne-Way Streets (CEOI17_oneway)C++17
0 / 100
1 ms4440 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5; vector<int> adj[MAXN+1]; map<pair<int,int>, int> edge; map<pair<int,int>, char> ans; int dep[MAXN+1], low[MAXN+1], cntX[MAXN+1], cntY[MAXN+1]; void dfs(int v, int p) { dep[v] = low[v] = dep[p] + 1; for (int u : adj[v]) { if (u == p) continue; if (dep[u] == 0) { dfs(u, v); low[v] = min(low[v], low[u]); cntX[v] += cntX[u]; cntY[v] += cntY[u]; } else { low[v] = min(low[v], dep[u]); } } if (cntX[v] == cntY[v] || dep[v] != low[v]) return; int node1 = v, node2 = p; if (edge.find({v, p}) == edge.end()) swap(node1, node2); if (edge[{node1, node2}] == 1) { pair<int,int> orient; if (cntX[v] > cntY[v]) { // edge should go from v -> p orient = {v, p}; } else { orient = {p, v}; } if (orient == make_pair(node1, node2)) { ans[{node1, node2}] = 'R'; } else { ans[{node1, node2}] = 'L'; } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n,m; cin >> n >> m; pair<int,int> aaa[m]; for (int i = 0; i < m; i++) { int a,b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); edge[{a,b}]++; aaa[i] = {a, b}; } int p; cin >> p; while (p--) { int x,y; cin >> x >> y; cntX[x]++, cntY[y]++; } dfs(1, 0); for (auto [a,b] : aaa) { cout << (ans[{a,b}] == 0 ? 'B' : ans[{a,b}]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...