Submission #866755

# Submission time Handle Problem Language Result Execution time Memory
866755 2023-10-27T02:31:08 Z _anhxinloi_ One-Way Streets (CEOI17_oneway) C++14
0 / 100
2 ms 8796 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){
            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]);
            }
            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];
//        if(x != y){
//            g[x].push_back(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 'void dfs(long long int, long long int)':
oneway.cpp:24:9: warning: unused variable 'tds' [-Wunused-variable]
   24 |     int tds = 0;
      |         ^~~
oneway.cpp: In function 'int main()':
oneway.cpp:108:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  108 |         auto [u, v] = canh[i];
      |              ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 8540 KB Output is correct
2 Correct 1 ms 8540 KB Output is correct
3 Correct 2 ms 8540 KB Output is correct
4 Correct 2 ms 8540 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8540 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8540 KB Output is correct
9 Incorrect 2 ms 8680 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 8540 KB Output is correct
2 Correct 1 ms 8540 KB Output is correct
3 Correct 2 ms 8540 KB Output is correct
4 Correct 2 ms 8540 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8540 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8540 KB Output is correct
9 Incorrect 2 ms 8680 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 8540 KB Output is correct
2 Correct 1 ms 8540 KB Output is correct
3 Correct 2 ms 8540 KB Output is correct
4 Correct 2 ms 8540 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8540 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8540 KB Output is correct
9 Incorrect 2 ms 8680 KB Output isn't correct
10 Halted 0 ms 0 KB -