Submission #1116964

#TimeUsernameProblemLanguageResultExecution timeMemory
1116964SunbaeOne-Way Streets (CEOI17_oneway)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #define mp std::make_pair #define F first #define S second #define N 100000 #define dN 200000 using pii = std::pair<int,int>; std::vector<int> g[N]; int d[N], dp[N], tin[N], low[N], br[N], cnt[N], mn[N], C[N], e[dN], t[dN], st[N][18], cp_sz, mm, ti = 1, c = 1; pii cp[N], E[N]; int P(int x, int y){ return std::lower_bound(cp, cp+cp_sz, mp(x, y)) - cp;} void dfs(int u, int p = -1){ tin[u] = low[u] = ti++; if(p != -1) d[u] = d[p] + 1; for(int v: g[u]){ if(v != p){ if(!tin[v]){ dfs(v, u); low[u] = std::min(low[u], low[v]); if(low[v] > tin[u] && cnt[P(u, v)] == 1) br[P(u, v)] = 1; }else{ low[u] = std::min(low[u], tin[v]); } } } } void efs(int u){ C[u] = c; for(int v: g[u]){ int x = std::min(u, v), y = std::max(u, v); if(!br[P(x, y)] && !C[v]) efs(v); } } void ffs(int u, int p = -1){ tin[u] = 1; e[mm++] = u; for(int v: g[u]) if(v != p) ffs(v, u), e[mm++] = u; } void gfs(int u, int p = -1){ tin[u] = 1; for(int v: g[u]) if(v != p) gfs(v, u), dp[u] += dp[v]; } signed main(){ int n, m; scanf("%d %d", &n, &m); for(int i = 0, u, v, x, y; i<m; E[i++] = {u, v}){ scanf("%d %d", &u, &v); --u; --v; cp[i] = {std::min(u, v), std::max(u, v)}; g[u].push_back(v); g[v].push_back(u); } std::sort(cp, cp+m); cp_sz = std::unique(cp, cp+m) - cp; for(int i = 0; i<n; ++i){ std::sort(g[i].begin(), g[i].end()); g[i].resize(std::unique(g[i].begin(), g[i].end()) - g[i].begin()); } for(int i = 0, x, y; i<m; ++i){ if((x = E[i].F) > (y = E[i].S)) std::swap(x, y); ++cnt[P(x, y)]; } for(int i = 0; i<n; ++i) if(!tin[i]) dfs(i); for(int i = 0; i<n; ++i) if(!C[i]) efs(i), ++c; for(int i = 0; i<n; --C[i++]) g[i].clear(); --c; for(int i = 0, u, v; i<m; ++i){ if(C[u = E[i].F] == C[v = E[i].S]) continue; g[C[u]].push_back(C[v]); g[C[v]].push_back(C[u]); } for(int i = 0; i<c; tin[i++] = 0){ std::sort(g[i].begin(), g[i].end()); g[i].resize(unique(g[i].begin(), g[i].end()) - g[i].begin()); } for(int i = 0; i<c; ++i) if(!tin[i]) ffs(i); for(int i = mm-1; ~i; --i) t[mn[e[i]] = i] = e[i]; for(int i = 0; i<mm; ++i) st[i][0] = mn[e[i]]; for(int j = 1; j<32 - __builtin_clz(mm); ++j){ for(int i = 0; i+(1<<j)-1<mm; ++j) st[i][j] = std::min(st[i][j-1], st[i+(1<<(j-1))][j-1]); } int p; scanf("%d", &p); for(int i = 0, u, v; i<p; ++i){ scanf("%d %d", &u, &v); if(mn[u = C[--u]] > mn[v = C[--v]]) std::swap(u, v); int j = 31 - __builtin_clz(mn[v]-mn[u]+1); int lca = t[std::min(st[mn[u]][j], st[mn[v]-(1<<j)+1][j])]; ++dp[u]; --dp[lca]; --dp[v]; ++dp[lca]; } std::fill(tin, tin+c, 0); for(int i = 0; i<c; ++i) if(!tin[i]) gfs(i); for(int i = 0; i<m; ++i){ int u = E[i].F, v = E[i].S, x = std::min(u, v), y = std::max(u, v); if(!br[P(x, y)]){ printf("B"); continue;} if(d[v = C[v]] > d[u = C[u]]){ if(dp[v] > 0) printf("L"); else if(dp[v] < 0) printf("R"); else printf("B"); }else{ if(dp[u] > 0) printf("R"); else if(dp[u] < 0) printf("L"); else printf("B"); } } }

Compilation message (stderr)

oneway.cpp: In function 'int main()':
oneway.cpp:43:26: warning: unused variable 'x' [-Wunused-variable]
   43 |     for(int i = 0, u, v, x, y; i<m; E[i++] = {u, v}){
      |                          ^
oneway.cpp:43:29: warning: unused variable 'y' [-Wunused-variable]
   43 |     for(int i = 0, u, v, x, y; i<m; E[i++] = {u, v}){
      |                             ^
oneway.cpp:59:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   59 |     for(int i = 0; i<n; --C[i++]) g[i].clear(); --c;
      |     ^~~
oneway.cpp:59:49: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   59 |     for(int i = 0; i<n; --C[i++]) g[i].clear(); --c;
      |                                                 ^~
oneway.cpp:68:47: error: call of overloaded 'ffs(int&)' is ambiguous
   68 |     for(int i = 0; i<c; ++i) if(!tin[i]) ffs(i);
      |                                               ^
In file included from /usr/include/string.h:432,
                 from /usr/include/c++/10/cstring:42,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:48,
                 from oneway.cpp:1:
/usr/include/strings.h:104:12: note: candidate: 'int ffs(int)'
  104 | extern int ffs (int __i) __THROW __attribute_const__;
      |            ^~~
oneway.cpp:33:6: note: candidate: 'void ffs(int, int)'
   33 | void ffs(int u, int p = -1){
      |      ^~~
oneway.cpp:77:17: warning: operation on 'u' may be undefined [-Wsequence-point]
   77 |         if(mn[u = C[--u]] > mn[v = C[--v]]) std::swap(u, v);
      |               ~~^~~~~~~~
oneway.cpp:77:34: warning: operation on 'v' may be undefined [-Wsequence-point]
   77 |         if(mn[u = C[--u]] > mn[v = C[--v]]) std::swap(u, v);
      |                                ~~^~~~~~~~
oneway.cpp:42:20: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |     int n, m; scanf("%d %d", &n, &m);
      |               ~~~~~^~~~~~~~~~~~~~~~~
oneway.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |         scanf("%d %d", &u, &v); --u; --v;
      |         ~~~~~^~~~~~~~~~~~~~~~~
oneway.cpp:74:17: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |     int p; scanf("%d", &p);
      |            ~~~~~^~~~~~~~~~
oneway.cpp:76:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   76 |         scanf("%d %d", &u, &v);
      |         ~~~~~^~~~~~~~~~~~~~~~~