제출 #237403

#제출 시각아이디문제언어결과실행 시간메모리
237403keta_tsimakuridzeOne-Way Streets (CEOI17_oneway)C++14
100 / 100
401 ms36856 KiB
#include<bits/stdc++.h> using namespace std; int n,m,k,u,v,mn[100005],ind[100005],fix[100005],bridge[100005],F[100005],sum[100005],timer,tmin[100005],q; char ans[100005]; vector<pair<int,pair<int,int> > >V[100005],B[100005]; map<int,int>FX[100005]; void dfs(int u,int p) { fix[u]=1; timer++; tmin[u]=mn[u]=timer; for(int i=0; i<V[u].size(); i++) { int v=V[u][i].first; if(v==p) continue; if(fix[v]==0) { dfs(v,u); mn[u]=min(mn[u],mn[v]); if(mn[v]>tmin[u] && FX[v][u]==1) { bridge[V[u][i].second.first]=1; F[v]=1; F[u]=1; } } else mn[u]=min(mn[u],tmin[v]); } // cout<<u<<"++"<<mn[u]<<endl; } void dfs1(int u,int p,int nm) { if(nm==1)fix[u]=2; else fix[u]=4; if(nm==1)ind[u]=p; for(int i=0; i<V[u].size(); i++) { int c=0; if(nm==2) c=4; else c=2; if(nm==2)if(bridge[V[u][i].second.first]!=0 &&fix[V[u][i].first]!=c ) { int v=V[u][i].first; B[ind[v]].push_back({p,{V[u][i].second.first,V[u][i].second.second}}); B[p].push_back({ind[v],{V[u][i].second.first,1-V[u][i].second.second}}); } if(fix[V[u][i].first]!=c && bridge[V[u][i].second.first]==0) { dfs1(V[u][i].first,p,nm); } } } void dfs2(int u,int p) { fix[u]=3; for(int i=0; i<B[u].size(); i++) { int v=B[u][i].first; if(v!=p ) { dfs2(v,u); sum[u]+=sum[v]; if(sum[v]>0) { if(B[u][i].second.second==1) { ans[B[u][i].second.first]='R'; } else ans[B[u][i].second.first]='L'; } if(sum[v]<0) { if(B[u][i].second.second==1) { ans[B[u][i].second.first]='L'; } else ans[B[u][i].second.first]='R'; } } } } int main() { cin>>n>>m; for(k=1; k<=m; k++) { cin>>u>>v; FX[u][v]++; FX[v][u]++; V[u].push_back({v,{k,1}}); V[v].push_back({u,{k,0}}); ans[k]='B'; } for(k=1; k<=n; k++) if(!fix[k]) dfs(k,0); for(k=1; k<=n; k++) { if(F[k] && fix[k]!=2)dfs1(k,k,1); } for(k=1; k<=n; k++) { if(F[k] && fix[k]!=4)dfs1(k,k,2); } cin>>q; while(q--) { cin>>u>>v; sum[ind[u]]++; sum[ind[v]]--; } for(k=1; k<=n; k++) { if(fix[ind[k]]!=3 ) { dfs2(ind[k],0); } } for(k=1; k<=m; k++) { cout<<ans[k]; } }

컴파일 시 표준 에러 (stderr) 메시지

oneway.cpp: In function 'void dfs(int, int)':
oneway.cpp:11:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<V[u].size(); i++) {
               ~^~~~~~~~~~~~
oneway.cpp: In function 'void dfs1(int, int, int)':
oneway.cpp:33:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<V[u].size(); i++) {
               ~^~~~~~~~~~~~
oneway.cpp: In function 'void dfs2(int, int)':
oneway.cpp:50:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<B[u].size(); i++) {
               ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...