Pagini recente » Cod sursa (job #2626141) | Cod sursa (job #2539253)
#include <bits/stdc++.h>
#define DIM 100005
using namespace std;
ifstream fin ("biconex.in");
ofstream fout ("biconex.out");
int n, m, i, j, a, b, cnt, cnt2, cnt3;
int f[DIM], niv[DIM], low[DIM], v[DIM], sol[DIM];
vector <int> L[DIM], comp[DIM];
stack <int> stiva;
void dfs (int nod, int tata, int nivel){
int x;
f[nod] = 1;
niv[nod] = nivel;
low[nod] = nivel;
stiva.push(nod);
for (int i=0; i<L[nod].size(); i++){
int vecin = L[nod][i];
if (nod == tata)
continue;
if (f[vecin] == 1){
low[nod] = min (low[nod], niv[vecin]);
}
else{
dfs(vecin, nod, nivel + 1);
low[nod] = min (low[nod], low[vecin]);
if (low[vecin] >= niv[nod]){
v[nod]++;
cnt++;
do{
x = stiva.top();
comp[cnt].push_back(x);
stiva.pop();
}while (x != vecin);
comp[cnt].push_back(nod);
}
}
}
}
int main(){
fin >> n >> m;
for (i=1; i<=m; i++){
fin >> a >> b;
L[a].push_back(b);
L[b].push_back(a);
}
dfs (1, 0, 1);
fout << cnt << "\n";
for (i=1; i<=cnt; i++){
for (j=0; j<comp[i].size(); j++){
fout << comp[i][j] << " ";
}
fout << "\n";
}
return 0;
}