제출 #655863

#제출 시각아이디문제언어결과실행 시간메모리
655863manizareOne-Way Streets (CEOI17_oneway)C++14
100 / 100
136 ms27128 KiB
#include<bits/stdc++.h> #define all(a) a.begin(),a.end() #define pb push_back using namespace std ; const int maxn = 1e5 + 2 , maxq = 502 , inf = 1e9 , mod = 1e9+7 ; vector <pair <int , int > > G[maxn] ; vector <int> l[maxn] ; int dp[maxn] ; bool mark2[maxn] , mark[maxn] ; int par[maxn] , cnt = 1 ,c[maxn] , pr[maxn] , pp[maxn] , dis[maxn] ; short ans[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); dis[cnt] = dis[r] + 1 ; dfs2(u , cnt); }else{ dfs2(u , r); } } } int bi[maxn][23] ; set <pair <int , int > > s[maxn] ; int sec = 1 ; void dfs3(int v){ for(int i =0 ; i < l[v].size() ; i++){ int u = l[v][i]; dfs3(u); dp[v] += dp[u] ; } } 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); 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); for(int i =1 ; i <= n ; i++)G[i].clear(); memset(dp , 0 , sizeof dp); int q ; cin >> q ; while(q--){ int v , u ; cin >> v >> u ; if(c[v] == c[u])continue ; v= c[v] , u = c[u] ; dp[v]++; dp[u]--; } for(int i =0 ; i < (int)vec.size() ;i++){ int u = vec[i]; dfs3(u); } for(int i =1; i < cnt ; i++){ if(dp[i] == 0){ if(pr[i] == 0)continue ; ans[pr[i]] =3 ; continue ; } int id = pr[i] ; if(dp[i] > 0){ if(c[ed[id].first] == i){ ans[id] = 2 ; }else{ ans[id] = 1; } }else{ if(c[ed[id].first] == i){ ans[id] = 1 ; }else{ ans[id] = 2; } } } for(int i = 1 ; i <= m ; i++){ if(ans[i] == 0){ cout << i << "<--\n"; } if(ans[i] == 3){ cout << "B"; continue ; } if(ans[i] == 2){ cout << "R"; } if(ans[i] == 1){ cout << "L" ; } } cout << endl; }

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

oneway.cpp: In function 'void dfs3(int)':
oneway.cpp:57:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for(int i =0 ; i < l[v].size() ; i++){
      |                 ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...