제출 #163339

#제출 시각아이디문제언어결과실행 시간메모리
163339alishahali1382One-Way Streets (CEOI17_oneway)C++14
100 / 100
128 ms18288 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O2,unroll-loops") using namespace std; typedef pair<int, int> pii; #define pb push_back const int MAXN = 100010; int n, m, k, u, v, x, y, t, a, b; int val[MAXN]; char ans[MAXN]; int E[MAXN][2]; int H[MAXN]; int comp[MAXN]; vector<pii> G[MAXN]; vector<int> G2[MAXN], bridge; int Bridge(int node, int par, int parid){ int res=H[node]=H[par]+1; for (pii p:G[node]) if (p.second!=parid){ int v=p.first, i=p.second; if (H[v]){ res=min(res, H[v]); ans[i]='B'; } else res=min(res, Bridge(v, node, i)); } if (res<H[node]){ ans[parid]='B'; G2[par].pb(node); G2[node].pb(par); } else if (parid) bridge.pb(parid); return res; } void dfs1(int node, int id){ comp[node]=id; for (int v:G2[node]) if (!comp[v]) dfs1(v, id); } int dfs2(int node, int par, int parid){ H[node]=H[par]+1; for (pii p:G[node]) if (p.first!=par) val[node]+=dfs2(p.first, node, p.second); if (val[node]==0) ans[parid]='B'; else if (val[node]<0 ^ E[parid][0]==par) ans[parid]='L'; else ans[parid]='R'; return val[node]; } int main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); cin>>n>>m; for (int i=1; i<=m; i++){ cin>>u>>v; E[i][0]=u, E[i][1]=v; G[u].pb({v, i}); G[v].pb({u, i}); } for (int i=1; i<=n; i++) if (!H[i]) Bridge(i, i, 0); for (int i=1; i<=n; i++) if (!comp[i]) dfs1(i, i); for (int i=1; i<=n; i++) G[i].clear(); for (int i:bridge){ E[i][0]=comp[E[i][0]]; E[i][1]=comp[E[i][1]]; int u=E[i][0], v=E[i][1]; G[u].pb({v, i}); G[v].pb({u, i}); } cin>>k; while (k--){ cin>>u>>v; u=comp[u]; v=comp[v]; val[u]++; val[v]--; } memset(H, 0, sizeof(H)); for (int i=1; i<=n; i++) if (!H[i]) dfs2(i, i, 0); for (int i=1; i<=m; i++) cout<<ans[i]; return 0; }

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

oneway.cpp: In function 'int dfs2(int, int, int)':
oneway.cpp:46:20: warning: suggest parentheses around comparison in operand of '^' [-Wparentheses]
  else if (val[node]<0 ^ E[parid][0]==par) ans[parid]='L';
           ~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...