Submission #655843

#TimeUsernameProblemLanguageResultExecution timeMemory
655843manizareOne-Way Streets (CEOI17_oneway)C++17
60 / 100
522 ms262144 KiB
#include<bits/stdc++.h> #define all(a) a.begin(),a.end() #define pb push_back using namespace std ; const int maxn = 2e6 + 10 , maxq = 502 , inf = 1e9 , mod = 1e9+7 ; vector <pair <int , int > > G[maxn] ; vector <int> l[maxn] ; int dp[maxn] , mark2[maxn] , mark[maxn] , par[maxn] , cnt = 1 ,c[maxn] , st[maxn] , en[maxn] , pr[maxn] , pp[maxn] , ans[maxn] , ok[maxn]; pair <int , int > ed[maxn] ; void dfs(int v){ mark[v] = 1; for(int i = 0; i < (int)G[v].size() ; i++){ int u = G[v][i].first , id = G[v][i].second ; if(mark[u] == 1){ if(mark2[id] == 0){ dp[v] ++ ; dp[u] -- ; ans[id] = 3 ; mark2[id] = 1; } continue ; } mark2[id] = 1; par[u] = id ; dfs(u) ; dp[v]+=dp[u]; } } void dfs2(int v , int r){ mark[v] = 1; c[v] = r ; for(int i = 0; i < (int)G[v].size() ; i++){ int u = G[v][i].first , id = G[v][i].second ; if(mark[u] == 1)continue ; if(dp[u] == 0){ cnt ++; //cout << v << " " << u << "<---\n"; pr[cnt] = id ; pp[cnt] = r ; l[r].pb(cnt); dfs2(u , cnt); }else{ dfs2(u , r); } } } vector <int> vv[maxn] , uu[maxn] ; int sec = 1 ; void dfs3(int v){ mark[v] = 1; for(int i = 0 ;i < (int)l[v].size() ; i++){ int u = l[v][i] ; dfs3(u); } if(pp[v] == 0)return ; int ok = 0 ; vector <int> xx , yy ; sort(all(vv[v]));sort(all(uu[v])); while(vv[v].size() > 0 && uu[v].size() > 0){ int vx = vv[v].back() , vz = uu[v].back() ; if(vx == vz){ vv[v].pop_back(); uu[v].pop_back(); }else if(vx > vz){ vv[pp[v]].pb(vx); xx.pb(vx); vv[v].pop_back(); }else{ yy.pb(vz); uu[pp[v]].pb(vz); uu[v].pop_back(); } } while(vv[v].size() > 0){ int vx = vv[v].back(); vv[v].pop_back(); xx.pb(vx); vv[pp[v]].pb(vx); } while(uu[v].size() > 0){ int vx = uu[v].back() ; uu[v].pop_back(); yy.pb(vx); uu[pp[v]].pb(vx); } int id = pr[v]; if(xx.size() == 0 && yy.size() ==0 ){ ans[pr[v]] = 3 ; }else if (yy.size() == 0){ if(c[ed[id].first] == v){ ans[id] = 2 ; }else{ ans[id] = 1 ; } }else{ if(c[ed[id].first] == v){ ans[id] = 1 ; }else{ ans[id] = 2 ; } } uu[v].clear(); vv[v].clear(); } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int n , m ; cin >> n >> m ; for(int i =1 ;i <= m ; i++){ int v , u ; cin >> v >> u ; if(v==u){ ans[i] = 3; continue ; } G[v].pb({u,i}); G[u].pb({v,i}); ed[i] = {v , u} ; } for(int i = 1; i <= n ; i++){ if(mark[i] == 1)continue ; dfs(i); } for(int i =1 ; i <= n ; i++){ if(par[i] == 0)continue ; if(dp[i] >= 1){ ans[par[i]] = 3 ; } } memset(mark , 0 , sizeof mark); memset(mark2 , 0 , sizeof mark2); vector <int> vec ; for(int i =1; i <= n ; i ++){ if(mark[i] == 1)continue ; vec.pb(cnt); dfs2(i ,cnt ) ; cnt++; } memset(mark , 0 , sizeof mark); int q ; cin >> q ; while(q--){ int v , u ; cin >> v >> u ; if(c[v] == c[u])continue ; vv[c[v]].pb(q); uu[c[u]].pb(q); } for(int i =0 ; i < (int)vec.size() ;i++){ int u = vec[i]; dfs3(u); } for(int i = 1 ; i <= m ; i++){ if(ans[i] == 3){ cout << "B"; } if(ans[i] == 2){ cout << "R"; } if(ans[i] == 1){ cout << "L" ; } } cout << endl; }

Compilation message (stderr)

oneway.cpp: In function 'void dfs3(int)':
oneway.cpp:58:6: warning: unused variable 'ok' [-Wunused-variable]
   58 |  int ok = 0 ;
      |      ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...