/**
____ ____ ____ ____ ____ ____
||l |||e |||i |||n |||a |||d ||
||__|||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|/__\|
**/
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
const int maxn = 7e4 + 10;
int n, m;
int par1[maxn], par2[maxn];
int find_leader1(int v)
{
if (v == par1[v])
return v;
return (par1[v] = find_leader1(par1[v]));
}
bool connected1(int v, int u)
{
v = find_leader1(v);
u = find_leader1(u);
if (v == u)
return true;
par1[u] = v;
return false;
}
int find_leader2(int v)
{
if (v == par2[v])
return v;
return (par2[v] = find_leader2(par2[v]));
}
bool connected2(int v, int u)
{
v = find_leader2(v);
u = find_leader2(u);
if (v == u)
return true;
par2[u] = v;
return false;
}
vector < int > g[maxn];
int tin[maxn], low[maxn], timer;
void dfs(int v, int p)
{
tin[v] = low[v] = ++ timer;
///cout << v << " : " << p << " " << g[v].size() << endl;
bool tf = false;
for (int u : g[v])
{
if (u == p && !tf)
{
tf = true;
continue;
}
if (tin[u] != 0)
{
low[v] = min(low[v], tin[u]);
}
else
{
dfs(u, v);
if (low[u] > tin[v])
cout << v << " " << u << endl;
low[v] = min(low[v], low[u]);
}
}
}
void solve()
{
cin >> n >> m;
int v, u;
for (int i = 1; i <= n; i ++)
par1[i] = i, par2[i] = i;
for (int i = 1; i <= m; i ++)
{
cin >> v >> u;
if (connected1(v, u))
{
if (!connected2(v, u))
{
g[v].push_back(u);
g[u].push_back(v);
}
}
else
{
g[v].push_back(u);
g[u].push_back(v);
}
}
for (int i = 1; i <= n; i ++)
if (tin[i] == 0)
dfs(i, 0);
}
int main()
{
speed();
solve();
return 0;
}
/**
3 2
1 2
2 3
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1896 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
2516 KB |
Output is correct |
2 |
Correct |
6 ms |
2260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
111 ms |
2400 KB |
Output is correct |
2 |
Correct |
83 ms |
2132 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
169 ms |
3196 KB |
Output is correct |
2 |
Correct |
154 ms |
2588 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
284 ms |
5024 KB |
Output is correct |
2 |
Correct |
200 ms |
4600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
355 ms |
11220 KB |
Output is correct |
2 |
Correct |
276 ms |
6600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
4 ms |
4820 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
4820 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
4924 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
6 ms |
4864 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |