Submission #1027518

#TimeUsernameProblemLanguageResultExecution timeMemory
1027518vjudge1One-Way Streets (CEOI17_oneway)C++17
100 / 100
559 ms116808 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; #define int long long // #define double long double #define endl '\n' #define fastIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #define setmin(x, y) x = min((x), (y)) #define setmax(x, y) x = max((x), (y)) #define sqr(x) ((x) * (x)) #define fi first #define se second // mt19937 hdp(chrono::high_resolution_clock::now().time_since_epoch().count()); // int rand(int l, int r){return l + ((hdp() % (r - l + 1)) + r - l + 1) % (r - l + 1);} const int NM = 1e6 + 5; const int mod = 1e6 + 3; const int inf = 1e9 + 1; vector<int> g[NM]; vector<pair<int, pair<int, int>>> G[NM]; int n, m, N, tin[NM], low[NM], timer, comp[NM]; pair<int, int> e[NM]; map<pair<int, int>, bool> is_cau, ditme, deophaicau; map<pair<int, int>, int> val; void dfs(int u, int p) { tin[u] = low[u] = ++timer; for (int v : g[u]) if (v != p) { if (tin[v]) setmin(low[u], low[v]); else { dfs(v, u); if (low[v] > tin[u] && !deophaicau[{u, v}]) is_cau[{u, v}] = 1; setmin(low[u], low[v]); } } } bool vis[NM]; void cpr(int u) { comp[u] = N; for (auto v : g[u]) { if (is_cau[{u, v}] || is_cau[{v, u}]) { if (comp[v]) { G[N].push_back({comp[v], {u, v}}); G[comp[v]].push_back({N, {v, u}}); } continue; } if (comp[v]) continue; cpr(v); } } void prep() { for (int i = 1; i <= n; i++) if (!tin[i]) dfs(i, 0); for (int i = 1; i <= n; i++) if (!comp[i]) { ++N; cpr(i); } } int dp[NM], cur; void DFS(int u) { vis[u] = 1; for (auto v : G[u]) if (!vis[v.fi]) { DFS(v.fi); val[v.se] = dp[v.fi]; dp[u] += dp[v.fi]; } } pair<int, int> rev(pair<int, int> x) { return {x.se, x.fi}; } signed main() { if (fopen("in.txt", "r")) { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); } fastIO cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; e[i] = {u, v}; if (ditme[{u, v}] || ditme[{v, u}]) { deophaicau[{u, v}] = deophaicau[{v, u}] = true; continue; } ditme[{u, v}] = true; ditme[{v, u}] = true; g[u].push_back(v); g[v].push_back(u); } prep(); int q; cin >> q; while (q--) { int u, v; cin >> u >> v; dp[comp[u]]++; dp[comp[v]]--; } for (int i = 1; i <= N; i++) if (!vis[i]) DFS(i); for (int i = 1; i <= m; i++) { if (!val[e[i]] && !val[rev(e[i])]) cout << 'B'; else if (val[e[i]] < 0 || val[rev(e[i])] > 0) cout << 'R'; else cout << 'L'; } }

Compilation message (stderr)

oneway.cpp: In function 'int main()':
oneway.cpp:105:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |         freopen("in.txt","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
oneway.cpp:106:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  106 |         freopen("out.txt","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...