Submission #1204480

#TimeUsernameProblemLanguageResultExecution timeMemory
1204480PlayVoltzOne-Way Streets (CEOI17_oneway)C++20
100 / 100
302 ms61100 KiB
#include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> using namespace std; #define int long long #define pb push_back #define mp make_pair #define pii pair<int, int> #define fi first #define se second struct trio{ int a, b, c; }; int counter=0; vector<vector<trio> > graph; vector<int> low, disc, ans, in, out, l, r; vector<set<int> > s; void dfs(int node, int par, int d){ disc[node]=low[node]=d; in[node]=++counter; for (auto [i, j, dir]:graph[node]){ if (j==par)continue; if (disc[i])low[node]=min(low[node], disc[i]); else{ dfs(i, j, d+1); low[node]=min(low[node], low[i]); if (low[i]>=disc[i]&&!s[i].empty()){ int c=*s[i].begin(); if (in[i]<=in[l[c]]&&out[i]>=out[l[c]])ans[j]=dir; else ans[j]=(dir==1?2:1); } if (s[i].size()>s[node].size())swap(s[i], s[node]); for (auto a:s[i]){ if (s[node].find(a)==s[node].end())s[node].insert(a); else s[node].erase(a); } } } out[node]=counter; } int32_t main(){ int n, m, q, a, b; cin>>n>>m; graph.resize(n+1); low.resize(n+1); disc.resize(n+1, 0); ans.resize(m, 0); in.resize(n+1); out.resize(n+1); s.resize(n+1); for (int i=0; i<m; ++i){ cin>>a>>b; graph[a].pb({b, i, 1}); graph[b].pb({a, i, 2}); } cin>>q; l.resize(q); r.resize(q); for(int i=0; i<q; ++i){ cin>>a>>b; if (a==b)continue; s[a].insert(i); s[b].insert(i); l[i]=a, r[i]=b; } for (int i=1; i<=n; ++i)if (!disc[i])dfs(i, -1, 1); for (int i=0; i<m; ++i){ if (!ans[i])cout<<'B'; else if (ans[i]==1)cout<<'L'; else cout<<'R'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...