답안 #1027284

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1027284 2024-07-19T03:15:17 Z coldbr3w One-Way Streets (CEOI17_oneway) C++17
100 / 100
184 ms 55248 KB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pll pair<long long, long long>
#define pb push_back
#define F first
#define S second
#define all(x) (x).begin(), (x).end()
 
const ll N = 2e5 + 100;
const ll inf = 1e18;
const ll mod = 1e9 + 7;
const ll block = 480;
ll n,m,p,timer=0;
vector<pll>adj[N];
struct ccjv{ll v, prv, nxt;};
vector<ccjv>g[N];
ll cmp[N], low[N], num[N], b[N], pa[N], up[N][20], dep[N], d[N], vs[N];
pll edge[N];
ll cur = 0;
vector<pll>order;
map<pll,ll>dir;
void pre_dfs(ll u, ll par){
    low[u] = num[u] = ++timer;
    for(auto x : adj[u]){
        ll v = x.F, idx = x.S;
        if(idx == par) continue;
        if(num[v]) low[u] = min(low[u], num[v]);
        else{
            pre_dfs(v, idx);
            low[u] = min(low[u], low[v]);
            if(low[v] == num[v]) {
                //cout << "bridge" << ' ' << u << ' ' << v << '\n';
                b[idx] = 1;
            }
        }
    }
}
void dfs_cmp(ll u, ll par){
    cmp[u] = cur;
    for(auto x : adj[u]){
        ll v = x.F, idx = x.S;
        if(idx == par) continue;
        if(b[idx]){
            if(cmp[v]) g[cmp[u]].pb({cmp[v], u, v}), g[cmp[v]].pb({cmp[u], v, u});
        }
        else if(!cmp[v]) dfs_cmp(v, idx);
    }
}
void dfs(ll u, ll par){
    vs[u] = 1;
    for(auto x : g[u]){
        ll v = x.v;
        if(v == par) continue;
        dfs(v, u);
        d[u] += d[v];
    }
    for(auto x : g[u]){
        ll v = x.v;
        if(v == par) continue;
        if(d[v] < 0) dir[{x.nxt, x.prv}] = 1, dir[{x.prv, x.nxt}] = -1;
        else if(d[v] > 0) dir[{x.nxt, x.prv}] = -1, dir[{x.prv, x.nxt}] = 1;
    }
}
void to_thic_cau(){  
    cin >> n >> m;
    for(int i = 1; i <= m;i++){
        ll u,v; cin >> u >> v;
        edge[i] = {u, v};
        adj[u].pb({v, i});
        adj[v].pb({u, i});
    }
    for(int i = 1; i <= n;i++) if(!num[i]) pre_dfs(i, 0);
    for(int i = 1; i <= n;i++){
        if(!cmp[i]){
            ++cur;
            dfs_cmp(i, 0);
        }
    }
    cin >> p;
    for(int i = 1; i <= p;i++){
        ll a,b; cin >> a >> b;
        a = cmp[a], b = cmp[b];
        d[a]--, d[b]++;
    }
    for(int i = 1; i <= n;i++){
        if(!vs[i]) dfs(i, 0);
    }
    for(int i = 1; i <= m;i++){
        if(!b[i]){
            cout << 'B';
        }
        else{
            if(!dir[{edge[i].F, edge[i].S}]) cout << 'B';
            else if(dir[{edge[i].F, edge[i].S}] == 1) cout << 'R';
            else cout << 'L';
        }
    }
    cout << '\n';
}
 
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll tc = 1;
    //cin >> tc;
    while(tc--) to_thic_cau();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 17500 KB Output is correct
2 Correct 3 ms 17704 KB Output is correct
3 Correct 3 ms 17756 KB Output is correct
4 Correct 3 ms 17756 KB Output is correct
5 Correct 3 ms 17756 KB Output is correct
6 Correct 2 ms 15584 KB Output is correct
7 Correct 3 ms 18012 KB Output is correct
8 Correct 3 ms 17912 KB Output is correct
9 Correct 2 ms 17756 KB Output is correct
10 Correct 3 ms 17752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 17500 KB Output is correct
2 Correct 3 ms 17704 KB Output is correct
3 Correct 3 ms 17756 KB Output is correct
4 Correct 3 ms 17756 KB Output is correct
5 Correct 3 ms 17756 KB Output is correct
6 Correct 2 ms 15584 KB Output is correct
7 Correct 3 ms 18012 KB Output is correct
8 Correct 3 ms 17912 KB Output is correct
9 Correct 2 ms 17756 KB Output is correct
10 Correct 3 ms 17752 KB Output is correct
11 Correct 26 ms 27472 KB Output is correct
12 Correct 40 ms 29008 KB Output is correct
13 Correct 41 ms 30548 KB Output is correct
14 Correct 48 ms 33092 KB Output is correct
15 Correct 49 ms 33968 KB Output is correct
16 Correct 75 ms 39764 KB Output is correct
17 Correct 109 ms 45440 KB Output is correct
18 Correct 83 ms 39760 KB Output is correct
19 Correct 104 ms 47696 KB Output is correct
20 Correct 31 ms 26952 KB Output is correct
21 Correct 30 ms 26840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 17500 KB Output is correct
2 Correct 3 ms 17704 KB Output is correct
3 Correct 3 ms 17756 KB Output is correct
4 Correct 3 ms 17756 KB Output is correct
5 Correct 3 ms 17756 KB Output is correct
6 Correct 2 ms 15584 KB Output is correct
7 Correct 3 ms 18012 KB Output is correct
8 Correct 3 ms 17912 KB Output is correct
9 Correct 2 ms 17756 KB Output is correct
10 Correct 3 ms 17752 KB Output is correct
11 Correct 26 ms 27472 KB Output is correct
12 Correct 40 ms 29008 KB Output is correct
13 Correct 41 ms 30548 KB Output is correct
14 Correct 48 ms 33092 KB Output is correct
15 Correct 49 ms 33968 KB Output is correct
16 Correct 75 ms 39764 KB Output is correct
17 Correct 109 ms 45440 KB Output is correct
18 Correct 83 ms 39760 KB Output is correct
19 Correct 104 ms 47696 KB Output is correct
20 Correct 31 ms 26952 KB Output is correct
21 Correct 30 ms 26840 KB Output is correct
22 Correct 155 ms 48980 KB Output is correct
23 Correct 148 ms 45736 KB Output is correct
24 Correct 151 ms 45416 KB Output is correct
25 Correct 184 ms 55248 KB Output is correct
26 Correct 140 ms 48208 KB Output is correct
27 Correct 135 ms 45648 KB Output is correct
28 Correct 22 ms 22096 KB Output is correct
29 Correct 39 ms 26204 KB Output is correct
30 Correct 49 ms 26648 KB Output is correct
31 Correct 40 ms 25684 KB Output is correct
32 Correct 68 ms 35408 KB Output is correct