Pagini recente » Borderou de evaluare (job #2079066) | Cod sursa (job #2279358) | Istoria paginii utilizator/maimutlover64 | Diferente pentru problema/lexicografic intre reviziile 26 si 27 | Cod sursa (job #2539339)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define DIM 100010
using namespace std;
ifstream fin ("biconex.in");
ofstream fout("biconex.out");
int v[DIM],NIV[DIM],LOW[DIM];
int componente,n,m,x,y,p,i,j,k,tp;
stack <int> ST;
vector<int> L[DIM],C[DIM];
void dfs(int nod,int tata,int niv){
v[nod]=1;
NIV[nod]=niv;
LOW[nod]=niv;
ST.push(nod);
for(int i=0;i<L[nod].size();i++){
int vecin = L[nod][i];
if(vecin==tata)
continue;
if(v[vecin])
LOW[nod]=min(LOW[nod],NIV[vecin]);
else{
dfs(vecin,nod,niv+1);
LOW[nod]=min(LOW[nod],LOW[vecin]);
if(LOW[vecin] >= NIV[nod]){
componente++;
do{
tp = ST.top();
C[componente].push_back(tp);
ST.pop();
}while(tp != vecin);
C[componente].push_back(nod);
}
}
}
}
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
dfs(1,0,1);
fout<<componente<<"\n";
for(i=1;i<=componente;i++){
for(j=0;j<C[i].size();j++)
fout<<C[i][j]<<" ";
fout<<"\n";
}
return 0;
}