답안 #894606

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
894606 2023-12-28T14:20:29 Z IWKR Pipes (CEOI15_pipes) C++17
40 / 100
889 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> adjlist[100001]; // adjacency list of graph

vector<bool> visited;
vector<int> tin, low;
vector<pair<int, int>> bridges;
int p[100001];
int p2[100001];
int timer;

void dfs(int v, int p = -1) {
    visited[v] = true;
    tin[v] = low[v] = timer++;
    bool yes = false;
    for (int to : adjlist[v]) {
        if (to == p && !yes) yes = 1;
        else if (visited[to]) {
            low[v] = min(low[v], tin[to]);
        } else {
            dfs(to, v);
            low[v] = min(low[v], low[to]);
            if (low[to] > tin[v]) cout << v << " " << to << '\n';
        }
    }
}

int find(int x) {
    if (p[x] == x) return x;
    return p[x] = find(p[x]);
}

int find2(int x) {
    if (p2[x] == x) return x;
    return p2[x] = find2(p2[x]);
}

void find_bridges() {
    timer = 0;
    visited.assign(n + 1, false);
    tin.assign(n + 1, -1);
    low.assign(n + 1, -1);
    for (int i = 1; i <= n; ++i) {
        if (!visited[i]) dfs(i);
    }
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        p[i] = i;
        p2[i] = i;
    }
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        if (find(a) != find(b)) {
            adjlist[a].push_back(b);
            adjlist[b].push_back(a);
            p[find(b)] = find(a);
        } else if (find2(a) != find2(b)) {
            adjlist[a].push_back(b);
            adjlist[b].push_back(a);
            p2[find2(a)] = find2(b);
        }
    }
    find_bridges();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 3420 KB Output is correct
2 Correct 1 ms 3420 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 3888 KB Output is correct
2 Correct 4 ms 3612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 69 ms 9176 KB Output is correct
2 Correct 69 ms 8908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 13936 KB Output is correct
2 Correct 140 ms 15216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 199 ms 22128 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 288 ms 31532 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 437 ms 45272 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 578 ms 58072 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 658 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 889 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -