Submission #1264933

#TimeUsernameProblemLanguageResultExecution timeMemory
1264933minggaOne-Way Streets (CEOI17_oneway)C++20
100 / 100
62 ms20672 KiB
// Author: caption_mingle #include "bits/stdc++.h" using namespace std; #define ln "\n" #define pb push_back #define fi first #define se second #define all(x) (x).begin(), (x).end() #define sz(x) ((int)(x).size()) #define ll long long const int mod = 1e9 + 7; const int inf = 2e9; const int N = 1e5 + 7; int n, m, q, scc; int num[N], low[N], timer, del[N], id[N]; bool vis[N]; char ans[N]; vector<int> st; int f[N]; pair<int, int> edge[N]; vector<pair<int, int>> g[N], g2[N]; void dfs(int u, int eid) { low[u] = num[u] = ++timer; st.pb(u); for(auto [v, id] : g[u]) { if(id == eid or del[v]) continue; if(num[v]) { low[u] = min(low[u], num[v]); } else { dfs(v, id); low[u] = min(low[u], low[v]); } } if(num[u] == low[u]) { int v; scc++; do { v = st.back(); del[v] = 1; id[v] = scc; st.pop_back(); } while(v != u); } } void dfs2(int u, int p) { vis[u] = 1; for(auto [v, eid] : g2[u]) { if(v == p) continue; dfs2(v, u); f[u] += f[v]; auto [a, b] = edge[eid]; // cerr << a << ' ' << b << ' ' << u << ' ' << v << ln; if(f[v] < 0) { // v - > u; if(id[a] == v) ans[eid] = 'L'; else ans[eid] = 'R'; } else if(f[v] > 0) { //u -> v; if(id[a] == v) ans[eid] = 'R'; else ans[eid] = 'L'; } } } signed main() { cin.tie(0) -> sync_with_stdio(0); #define task "" if(fopen(task ".INP", "r")) { freopen(task ".INP", "r", stdin); freopen(task ".OUT", "w", stdout); } cin >> n >> m; for(int i = 1; i <= m; i++) { int u, v; cin >> u >> v; ans[i] = 'B'; if(u != v) { g[u].pb({v, i}); g[v].pb({u, i}); edge[i] = {u, v}; } } for(int i = 1; i <= n; i++) { if(num[i]) continue; dfs(i, 0); } for(int u = 1; u <= n; u++) { for(auto [v, eid] : g[u]) { if(id[v] != id[u]) { int U = id[u], V = id[v]; g2[U].pb({V, eid}); } } } cin >> q; for(int i = 1; i <= q; i++) { int u, v; cin >> u >> v; int U = id[u], V = id[v]; f[U]++; f[V]--; } for(int u = 1; u <= n; u++) { if(vis[u]) continue; dfs2(u, 0); } for(int i = 1; i <= m; i++) cout << ans[i]; cerr << "\nTime: " << clock() * 1000 / CLOCKS_PER_SEC; }

Compilation message (stderr)

oneway.cpp: In function 'int main()':
oneway.cpp:74:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |                 freopen(task ".INP", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
oneway.cpp:75:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |                 freopen(task ".OUT", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...