#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Nmax = 1e5 + 5;
int n, m, i, x, y;
int level[Nmax], low[Nmax];
vector<int> v[Nmax];
struct Forest
{
int t[Nmax];
void clear()
{
int i;
for(i=1; i<=n; ++i) t[i] = i;
}
int boss(int x)
{
if(t[x] == x) return x;
return t[x] = boss(t[x]);
}
void unite(int x, int y)
{
x = boss(x), y = boss(y);
t[x] = y;
}
} A, B;
void solve(int node, int dad = 0)
{
level[node] = low[node] = level[dad] + 1;
for(auto son : v[node])
{
if(son == dad) continue;
if(level[son])
{
low[node] = min(low[node], level[son]);
continue;
}
solve(son, node);
low[node] = min(low[node], low[son]);
if(low[son] == level[son])
cout << node << ' ' << son << '\n';
}
}
int main()
{
// freopen("input", "r", stdin);
// freopen("output", "w", stdout);
cin.sync_with_stdio(false);
cin >> n >> m;
A.clear(); B.clear();
while(m--)
{
cin >> x >> y;
if(B.boss(x) == B.boss(y)) continue; /// same bcomp
if(A.boss(x) != A.boss(y)) A.unite(x, y);
else B.unite(x, y);
v[x].push_back(y);
v[y].push_back(x);
}
for(i=1; i<=n; ++i)
{
sort(v[i].begin(), v[i].end());
v[i].erase( unique(v[i].begin(), v[i].end()), v[i].end() );
}
for(i=1; i<=n; ++i)
if(!level[i]) solve(i);
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2688 KB |
Output is correct |
2 |
Incorrect |
3 ms |
2688 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3200 KB |
Output is correct |
2 |
Incorrect |
7 ms |
2944 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
103 ms |
3040 KB |
Output is correct |
2 |
Incorrect |
99 ms |
2936 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
168 ms |
3856 KB |
Wrong number of edges |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
293 ms |
5432 KB |
Output is correct |
2 |
Correct |
245 ms |
5112 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
423 ms |
10720 KB |
Output is correct |
2 |
Incorrect |
354 ms |
7128 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
656 ms |
12000 KB |
Output is correct |
2 |
Incorrect |
577 ms |
9064 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
809 ms |
14196 KB |
Output is correct |
2 |
Incorrect |
773 ms |
9088 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
981 ms |
14176 KB |
Output is correct |
2 |
Incorrect |
945 ms |
9076 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1181 ms |
13544 KB |
Output is correct |
2 |
Correct |
1096 ms |
10736 KB |
Output is correct |