Submission #570929

#TimeUsernameProblemLanguageResultExecution timeMemory
570929bojackduyOne-Way Streets (CEOI17_oneway)C++11
0 / 100
6 ms5332 KiB
#include<bits/stdc++.h> #define int long long #define task "task" #define size() size() * 1ll #define all(x) (x).begin(), (x).end() #define allr(x, sz) (x) + 1, (x) + 1 + sz #define pb push_back #define pii pair<int,int> #define fi first #define se second #define MASK(x) (1LL<<(x)) #define BIT(x,i) (((x)>>(i))&1) #define numbit(x) __builtin_popcountll(x) using namespace std; const int N = 1e5 + 1; const int M = 1e3 + 1; const long long mod = 1e9 + 7; const long long oo = 1e18 + 7; typedef vector<int> vi; typedef vector<pii> vii; typedef long long ll; template<class t> bool mini(t &x,t y) { if (x > y) { x = y; return 1; } return 0; } template<class t> bool maxi(t &x,t y) { if (x < y) { x = y; return 1; } return 0; } void file() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen(task".in", "r", stdin); // freopen(task".out", "w", stdout); return ; } int n, m, p; pii e[N]; vi a[N], adj[N]; map<pii, int> mp, mp1; stack<int> st; int num[N], low[N]; void dfs(int u, int chu) { st.push(u); num[u] = low[u] = ++num[0]; for (auto v: a[u]) if (v != chu) { if (num[v]) mini(low[u], num[v]); else { dfs(v, u); mini(low[u], low[v]); } } if (num[u] == low[u]) { int v; low[0]++; do { v = st.top(), st.pop(); num[v] = low[v] = mod + low[0]; } while (v != u); } } int cha[N]; void dfs1(int u, int chu) { cha[u] = chu; num[u] = 1; for (auto v: adj[u]) if (!num[v] && v != chu) { dfs1(v, u); } } int dp[N]; void dfs2(int u, int chu) { num[u] = 0; for (auto v: adj[u]) if (num[v] && v != chu) { dfs2(v, u); dp[u] += dp[v]; } } void solve(int test = -1) { cin >> n >> m; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; a[x].pb(y); a[y].pb(x); e[i] = pii(x, y); } for (int i = 1; i <= n; i++) if (!num[i]) dfs(i, 0); for (int i = 1; i <= n; i++) { num[i] = 0; for (auto v: a[i]) { if (low[i] != low[v]) { adj[low[i] - mod].pb(low[v] - mod); } } } for (int i = 1; i <= low[0]; i++) if (!num[i]) dfs1(i, 0); cin >> p; for (int i = 1; i <= p; i++) { int x, y; cin >> x >> y; x = low[x] - mod; y = low[y] - mod; dp[x]++; dp[y]--; } for (int i = 1; i <= low[0]; i++) if (num[i]) dfs2(i, 0); for (int i = 2; i <= low[0]; i++) { int u = cha[i]; mp[pii(i, u)] = dp[i]; mp[pii(u, i)] = -dp[i]; } for (int i = 1; i <= n; i++) { for (auto v: a[i]) { mp1[pii(i, v)] = mp[pii(low[i] - mod, low[v] - mod)]; } } for (int i = 1; i <= m; i++) { int u = e[i].fi; int v = e[i].se; if (mp1[pii(u, v)] == 0) cout << "B"; else { if (mp1[pii(u, v)] > 0) cout << "R"; else cout << "L"; } } } int32_t main() { file(); int T = 1; // cin >> T; for (int i = 1; i <= T; i++) { solve(i); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...