This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
struct UnionFind
{
vector<int> parent;
UnionFind(int n)
{
parent.resize(n);
for (int i = 0; i < n; i++)
parent[i] = i;
}
int find(int a)
{
if (parent[a] == a)
return a;
return parent[a] = find(parent[a]);
}
bool unite(int a, int b)
{
a = find(a);
b = find(b);
if (a == b)
return false;
parent[a] = b;
return true;
}
};
vector<vector<pair<int, int>>> adj;
vector<int> low, pre;
int timer = 0;
void dfs_bridges(int i, int p)
{
pre[i] = low[i] = timer++;
for (auto [c, j] : adj[i])
{
if (j == p)
continue;
if (pre[c] != -1)
{
low[i] = min(low[i], pre[c]);
}
else
{
dfs_bridges(c, j);
if (low[c] > pre[i])
{
cout << i + 1 << " " << c + 1 << "\n";
}
low[i] = min(low[i], low[c]);
}
}
}
signed main()
{
cin.tie(0);
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
adj.resize(n);
pre = low = vector<int>(n, -1);
UnionFind comp(n);
UnionFind bridge(n);
int edge_index = 0;
while (m--)
{
int a, b;
cin >> a >> b;
a--, b--;
if (comp.unite(a, b))
{
adj[a].push_back({b, edge_index});
adj[b].push_back({a, edge_index});
edge_index++;
}
else if (bridge.unite(a, b))
{
adj[a].push_back({b, edge_index});
adj[b].push_back({a, edge_index});
edge_index++;
}
}
for (int i = 0; i < n; i++)
{
if (pre[i] == -1)
dfs_bridges(i, -1);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |