Pagini recente » Cod sursa (job #2953634) | Cod sursa (job #1844240) | Cod sursa (job #31185) | Cod sursa (job #1754833) | Cod sursa (job #3122028)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int n, m, cnt;
vector<vector<int> > adj(100001);
vector<int> tin(100001), low(100001), viz(100001);
stack<pair<int, int> > s;
vector<set<int> > comp;
void solve(int x, int y){
set<int> c;
int a, b;
do{
a = s.top().first;
b = s.top().second;
s.pop();
c.insert(a);
c.insert(b);
}while(a != x || b != y);
comp.push_back(c);
}
void dfs(int nod, int p){
tin[nod] = low[nod] = ++cnt;
viz[nod] = 1;
for(auto i : adj[nod]){
if(i == p) continue;
if(viz[i]){
low[nod] = min(low[nod], tin[i]);
}
else{
s.push({nod, i});
dfs(i, nod);
low[nod] = min(low[nod], low[i]);
if(low[i] >= tin[nod]){
solve(nod, i);
}
}
}
}
int main(){
fin >> n >> m;
for(int i = 1; i <= m; i++){
int a, b;
fin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1, -1);
fout << comp.size() << '\n';
for(auto i : comp){
for(auto j : i)
fout << j << ' ';
fout << '\n';
}
}