답안 #866769

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
866769 2023-10-27T03:19:28 Z _anhxinloi_ One-Way Streets (CEOI17_oneway) C++14
0 / 100
1 ms 8540 KB
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second

using namespace std;

const int maxn = 1e5 + 5;
const int inf = 1e18;
typedef pair<int, int> pii;

int low[maxn], num[maxn], tds, scc;
int lab[maxn], n, m, d[maxn], q;
char s[maxn];
stack<int> st;
vector<int> adj[maxn], g[maxn];
pii canh[maxn];
bool check[maxn];

void dfs(int u, int par)
{
    low[u] = num[u] = ++tds;
    st.push(u);
    int tds = 0;
    for(int v : adj[u]){
        if(v != par || tds == 1){
            if(num[v] != 0)
                low[u] = min(low[u], num[v]);
            else{
                dfs(v, u);
                low[u] = min(low[u], low[v]);
            }
        }
        else{
            tds++;
        }
    }

    if(low[u] >= num[u]){
        scc++;
        int tmp;
        do
        {
            tmp = st.top();
            st.pop();
            lab[tmp] = scc;
//            for (int w: adj[tmp]) {
//                if (lab[w] && scc != lab[w]){
//                    g[scc].push_back(lab[w]);
////                    cout << lab[w] << ' ' << scc << endl;
//                }
//            }
            low[tmp] = num[tmp] = inf;
        }while(tmp != u);
    }
}

void dfs_work(int u)
{
    check[u] = true;
    for(int v : g[u]){
        if(!check[v])
            dfs_work(v);
        d[u] += d[v];
    }
}

signed main()
{
//    freopen("oneway.inp" , "r" , stdin);
//    freopen("oneway.out" , "w" , stdout);

    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    cin >> n >> m;
    for(int i=1 ; i<=m ; ++i){
        int u, v;   cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
        canh[i] = {u, v};
    }

    for(int i=1 ; i<=n ; ++i){
        if(!num[i]){
            dfs(i, 0);
        }
    }

    for(int i=1 ; i<=m ; ++i){
        auto [u, v] = canh[i];
        int x = lab[u];
        int y = lab[v];
        g[max(x, y)].push_back(min(x, y));
    }

    cin >> q;
    for(int i=1 ; i<=q ; ++i){
        int u, v;   cin >> u >> v;
        u = lab[u]; v = lab[v];
        d[v]--; d[u]++;
    }

    for(int i=1 ; i<=scc ; ++i){
        if(!check[i]){
            dfs_work(i);
        }
    }

    for(int i=1 ; i<=m ; ++i){
        auto [u, v] = canh[i];
        int x = lab[u]; int y = lab[v];

        if(x == y){
            s[i] = 'B';
        }

        if(x > y)
        {
            if(d[y] > 0)    s[i] = 'L';
            if(d[y] < 0)    s[i] = 'R';
            if(d[y] == 0)   s[i] = 'B';
        }

        if(x < y)
        {
            if(d[x] > 0)    s[i] = 'R';
            if(d[x] < 0)    s[i] = 'L';
            if(d[x] == 0)   s[i] = 'B';
        }
    }

    for(int i=1 ; i<=m ; ++i){
        cout << s[i];
    }
}

/// code by yourlove ///

Compilation message

oneway.cpp: In function 'int main()':
oneway.cpp:90:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   90 |         auto [u, v] = canh[i];
      |              ^
oneway.cpp:110:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  110 |         auto [u, v] = canh[i];
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -