답안 #527138

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
527138 2022-02-17T02:35:08 Z chicken337 Pipes (CEOI15_pipes) C++14
10 / 100
981 ms 25804 KB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
 
int v, e, ID = 0;
int num[MAXN], low[MAXN];
int p[2][MAXN], r[2][MAXN];
vector<int> adj[MAXN];
 
int root(int id, int x){
    if(p[id][x] == x) return x;
    return p[id][x] = root(id, p[id][x]);
}
void connect(int id, int x, int y){
    x = root(id, x), y = root(id, y);
    if(r[id][x] > r[id][y]) swap(x, y);
    p[id][x] = y; r[id][y] ++;
}
bool connected(int id, int x, int y){
    x = root(id, x), y = root(id, y);
    return x == y;
}
 
void dfs(int x, int par){
    num[x] = low[x] = ID ++;
    for(int nxt : adj[x]){
        if(num[nxt] == -1){
            dfs(nxt, x);
            if(num[x] < low[nxt])
                cout << x+1 << ' ' << nxt+1 << '\n';
            low[x] = min(low[x], low[nxt]);
        } else if(nxt != par){
            low[x] = min(low[x], num[nxt]);
        }
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    cin >> v >> e; int a, b;
    for(int i = 0; i < v; i ++)
        p[0][i] = p[1][i] = i,
        r[0][i] = r[1][i] = 0,
        num[i] = low[i] = -1;
    for(int i = 0; i < e; i ++){
        cin >> a >> b;
        if(!connected(0, a-1, b-1)){
            adj[a-1].push_back(b-1);
            adj[b-1].push_back(a-1);
            connect(0, a-1, b-1);
        } else if(!connected(1, a-1, b-1)){
            adj[a-1].push_back(b-1);
            adj[b-1].push_back(a-1);
            connect(1, a-1, b-1);
        }
    }
    for(int i = 0; i < v; i ++)
        if(num[i] == -1)
            dfs(i, -1);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2640 KB Output is correct
2 Incorrect 2 ms 2596 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 3276 KB Output is correct
2 Incorrect 5 ms 3020 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 92 ms 8284 KB Output is correct
2 Incorrect 104 ms 7268 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 149 ms 11940 KB Wrong number of edges
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 270 ms 15968 KB Output is correct
2 Correct 197 ms 8208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 309 ms 12264 KB Output is correct
2 Incorrect 269 ms 7876 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 480 ms 13888 KB Output is correct
2 Incorrect 445 ms 10196 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 647 ms 16840 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 779 ms 19360 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 981 ms 15800 KB Output is correct
2 Runtime error 975 ms 25804 KB Memory limit exceeded
3 Halted 0 ms 0 KB -