#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
using ll = long long;
using ar2 = array<ll,2>;
using vi = vector<int>;
const int mxN = (int)1e5+10;
const ll INF = (int)1e9;
const ll MOD = (ll)1e6+7;
template<int SZ> struct Dsu{
int p[SZ], sz[SZ];
void init(int n=SZ-1){
for(int i = 1; i <= n; i++) p[i]=i,sz[i]=1;
}
int findSet(int i){return i==p[i]?i:p[i]=findSet(p[i]);}
bool isSameSet(int i, int j){ return findSet(i)==findSet(j); }
void unionSet(int i, int j){
int x = findSet(i), y = findSet(j);
if(x==y) return;
if(sz[x]<sz[y])swap(x,y);
p[y] = x, sz[x]+=sz[y];
}
};
Dsu<mxN> dsu, dsu2;
int n, m, dfs_tim;
vi adj[mxN];
int low[mxN], st[mxN];
void dfs(int s, int p){
st[s]=low[s]=++dfs_tim;
bool par = 0;
for(auto u : adj[s]){
if(u==p and !par){ par=1; continue;}
if(!st[u]){
dfs(u,s);
low[s] = min(low[s], low[u]);
if(low[u] > st[s]) cout << s << " " << u << "\n";
}
else low[s]=min(low[s],st[u]);
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> m; dsu.init(n), dsu2.init(n);
for(int i = 0; i < m; i++){
int a, b,ok=0; cin >> a >> b;
if(dsu.isSameSet(a,b)){
if(!dsu2.isSameSet(a,b))
dsu2.unionSet(a,b),ok=1;
}
else dsu.unionSet(a,b),ok=1;
if(!ok) continue;
adj[a].pb(b), adj[b].pb(a);
}
for(int i = 1; i <= n; i++){
if(st[i]) continue;
dfs_tim = 0; dfs(i,0);
}
}
# | 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... |