제출 #1282382

#제출 시각아이디문제언어결과실행 시간메모리
1282382warrennOne-Way Streets (CEOI17_oneway)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #pragma GCC optimize("O3,unroll-loops") const int maxn = 1e5; int n, m; vector<pair<int,int>> adj[maxn+2]; int dsu[maxn+2], val[maxn+2], vis[maxn+2]; int bridge[maxn+2], disc[maxn+2], low[maxn+2], ans[maxn+2]; pair<int,int> road[maxn+2]; int timer = 0; int fin(int a){ return dsu[a]==a ? a : dsu[a]=fin(dsu[a]); } void merg(int a,int b){ a=fin(a); b=fin(b); if(a!=b) dsu[a]=b; } void dfs(int u,int parentEdge){ disc[u] = low[u] = ++timer; for(auto [v,id] : adj[u]){ if(id == parentEdge) continue; if(!disc[v]){ dfs(v,id); low[u] = min(low[u], low[v]); if(low[v] > disc[u]) bridge[id] = 1; } else { low[u] = min(low[u], disc[v]); } } } void dfs2(int u,int p){ vis[u]=1; for(auto [v,id]: adj[u]){ if(v==p) continue; dfs2(v,u); val[u]+=val[v]; if(val[v]>0){ ans[id] = (road[id].first==u)?2:1; } else if(val[v]<0){ ans[id] = (road[id].first==u)?1:2; } } } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>m; for(int i=1;i<=n;i++) dsu[i]=i; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; adj[u].push_back({v,i}); adj[v].push_back({u,i}); road[i]={u,v}; } for(int i=1;i<=n;i++) if(!disc[i]) dfs(i,0); for(int i=1;i<=m;i++) if(!bridge[i]) merg(road[i].first, road[i].second); for(int i=1;i<=n;i++) adj[i].clear(); for(int i=1;i<=m;i++) if(bridge[i]){ int a=fin(road[i].first), b=fin(road[i].second); adj[a].push_back({b,i}); adj[b].push_back({a,i}); } int q; cin>>q; while(q--){ int a,b; cin>>a>>b; val[fin(a)]++; val[fin(b)]--; } for(int i=1;i<=n;i++) if(fin(i)==i && !vis[i]) dfs2(i,0); for(int i=1;i<=m;i++){ if(ans[i]==0) cout<<'B'; else if(ans[i]==1) cout<<'R'; else cout<<'L'; } cout<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...