#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <long double, pii> muchie;
const ll NMAX = 100001;
const ll VMAX = 1000001;
const ll INF = (1LL << 60);
const ll MOD = 1000000007;
const ll BLOCK = 1000000;
const ll nr_of_bits = 16;
vector <int> v[NMAX];
int root;
int lvl[NMAX];
int parent[NMAX];
int parentB[NMAX];
int findR(int a){
if(parent[a] == a)
return a;
return parent[a] = findR(parent[a]);
}
int findRB(int a){
if(parentB[a] == a)
return a;
return parentB[a] = findRB(parentB[a]);
}
void unite(int a, int b){
a = findR(a);
b = findR(b);
parent[a] = b;
}
void uniteB(int a, int b){
a = findRB(a);
b = findRB(b);
parentB[a] = b;
}
map <int, int> dp;
void DFS(int node, int p){
lvl[node] = lvl[p] + 1;
for(auto x : v[node]){
if(lvl[x] == 0){
DFS(x, node);
}else if(lvl[x] > lvl[node]){
dp[node]--;
}else{
dp[node]++;
}
}
if(node != root){
dp[node]--;
}
dp[p] += dp[node];
if(dp[node] == 0 && node != root){
cout << node << " " << p << "\n";
}
dp.erase(node);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m, i;
cin >> n >> m;
for(i = 1; i <= n; i++){
parent[i] = i;
parentB[i] = i;
}
for(i = 1; i <= m; i++){
int a, b;
cin >> a >> b;
if(findR(a) != findR(b)){
v[a].push_back(b);
v[b].push_back(a);
unite(a, b);
}else if(findRB(a) != findRB(b)){
v[a].push_back(b);
v[b].push_back(a);
uniteB(a, b);
}
}
for(i = 1; i <= n; i++){
if(!lvl[i]){
root = i;
DFS(root, 0);
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2644 KB |
Output is correct |
2 |
Correct |
1 ms |
2644 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
3156 KB |
Output is correct |
2 |
Correct |
6 ms |
2900 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
84 ms |
2960 KB |
Output is correct |
2 |
Correct |
88 ms |
2840 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
159 ms |
3768 KB |
Output is correct |
2 |
Correct |
170 ms |
3240 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
288 ms |
5340 KB |
Output is correct |
2 |
Correct |
215 ms |
4972 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
380 ms |
10764 KB |
Output is correct |
2 |
Correct |
337 ms |
6924 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
585 ms |
11916 KB |
Output is correct |
2 |
Correct |
557 ms |
8848 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
767 ms |
14088 KB |
Output is correct |
2 |
Correct |
672 ms |
8776 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
880 ms |
14092 KB |
Output is correct |
2 |
Runtime error |
1022 ms |
61816 KB |
Memory limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1033 ms |
13584 KB |
Output is correct |
2 |
Runtime error |
988 ms |
24396 KB |
Memory limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |