답안 #878729

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
878729 2023-11-25T06:34:14 Z Ghulam_Junaid Pipes (CEOI15_pipes) C++17
10 / 100
1006 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int n, m, p, h[N], mnh[N], st[N], ft[N], tme;

bool vis[N];
vector<pair<int, int>> g[N], edges, important;
string s;

bool in_sub(int u, int v){
    return (st[v] <= st[u] && st[u] < ft[v]);
}

void dfs(int v, int prev = -1){
    vis[v] = 1;
    mnh[v] = h[v];

    st[v] = tme;
    tme++;

    // cout << "Running dfs on " << v << endl;

    for (auto [id, u] : g[v]){
        if (id == prev) continue;

        if (!vis[u]){
            h[u] = h[v] + 1;
            dfs(u, id);
            mnh[v] = min(mnh[v], mnh[u]);

            if (mnh[u] > h[v]){ // (v, u) is a bridge
                cout << u << " " << v << endl;
                // cout << v << " -- " << u << " is a bridge." << endl;
            //     for (auto [x, y] : important){
            //         bool A = in_sub(x, u);
            //         bool B = in_sub(y, u);

            //         // cout << x << " " << y << " " << u << " " << A << " " << B << endl;

            //         if (A and !B){
            //             // u to v
            //             if (edges[id].first == u)
            //                 s[id] = 'R';
            //             else
            //                 s[id] = 'L';
            //         }
            //         if (!A and B){
            //             // v to u
            //             if (edges[id].first == v)
            //                 s[id] = 'R';
            //             else
            //                 s[id] = 'L';
            //         }
            //     }
            }
            // else
            //     s[id] = 'B';
        }
        else
            mnh[v] = min(mnh[v], h[u]);
    }
    ft[v] = tme;
}

int main(){
    cin >> n >> m;

    for (int i=0; i<m; i++){
        int u, v;
        cin >> u >> v;

        s += 'B';
        edges.push_back({u, v});
        // if (u == v)
        //     continue;

        g[u].push_back({i, v});
        g[v].push_back({i, u});

    }

    // cin >> p;
    // for (int i=0; i<p; i++){
    //     int u, v;
    //     cin >> u >> v;

    //     // if (u == v) continue;
    //     important.push_back({u, v});
    // }

    dfs(1);

    // cout << s << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 3676 KB Wrong number of edges
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 229 ms 32468 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 394 ms 44160 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 675 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 933 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 988 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1006 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 952 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 904 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -