Pagini recente » Cod sursa (job #1234824) | Cod sursa (job #2068978) | Cod sursa (job #1681636) | Cod sursa (job #900837) | Cod sursa (job #2539466)
#include <fstream>
#include <algorithm>
#include <vector>
#include <bitset>
#include <deque>
#define dim 100001
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int n,m,i,j,niv[dim],low[dim],cnt,x;
bitset <dim> f;
vector <int> l[dim],c[dim];
deque <int> q;
void dfs(int nod, int tata){
f[nod]=1;
niv[nod]=1+niv[tata];
low[nod]=niv[nod];
q.push_back(nod);
for(int i=0;i<l[nod].size();i++){
int vec=l[nod][i];
if(vec==tata)
continue;
if(f[vec]==1){
low[nod]=min(low[nod],niv[vec]);
}else{
dfs(vec,nod);
low[nod]=min(low[nod],low[vec]);
if(low[vec]>=niv[nod]){
cnt++;
do{
x=q.back();
q.pop_back();
c[cnt].push_back(x);
}while(x!=vec);
c[cnt].push_back(nod);
}
}
}
}
int main(){
fin>>n>>m;
for(;m;m--){
fin>>i>>j;
l[i].push_back(j);
l[j].push_back(i);
}
niv[1]=1;
dfs(1,0);
for(i=1;i<=cnt;i++)
sort(c[i].begin(),c[i].end());
fout<<cnt<<"\n";
for(i=1;i<=cnt;i++,fout<<"\n"){
for(j=0;j<c[i].size();j++)
fout<<c[i][j]<<" ";
}
return 0;
}