#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 |
- |