Pagini recente » Cod sursa (job #1893906) | Cod sursa (job #1584033) | Cod sursa (job #723072) | Cod sursa (job #1230705) | Cod sursa (job #1528063)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("biconex.in");
ofstream out("biconex.out");
const int Nmax = 100001;
vector<int> G[Nmax],C[Nmax];
int N,M,L[Nmax],S[Nmax],K;
int dfs(int x,int l){
S[++S[0]]=x;
L[x]=l;
int h=l;
for(vector<int>::iterator it=G[x].begin();it!=G[x].end();it++){
if(!L[*it]){
int st=S[0];
int r=dfs(*it,l+1);
if(r>=L[x]){
K++;
while(S[0]>st) C[K].push_back(S[S[0]--]);
C[K].push_back(x);
}
h=min(h,r);
}
else if(L[*it]!=l-1) h=min(h,L[*it]);
}
return h;
}
int main(){
in>>N>>M;
int x,y;
for(int i=1;i<=M;i++){
in>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
dfs(1,1);
out<<K<<'\n';
for(int i=1;i<=K;i++){
for(vector<int>::iterator it=C[i].begin();it!=C[i].end();++it) out<<*it<<' '; out<<'\n';
}
return 0;
}