Pagini recente » Cod sursa (job #850043) | Cod sursa (job #1521773) | Cod sursa (job #2223904) | Cod sursa (job #1434366) | Cod sursa (job #2487983)
#include <fstream>
#include <vector>
#include<stack>
#include<algorithm>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
vector<int>a[100010];
vector<int>c[100010];
stack<int>s;
int v[100010],nv[100010],low[100010],k,f[100010],t,n,m,x,y,sol;
void dfs(int nod,int niv,int tata){
v[nod]=1;
nv[nod]=niv;
low[nod]=niv;
s.push(nod);
for(int i=0;i<a[nod].size();i++){
int vecin=a[nod][i];
if(vecin!=tata){
if(v[vecin]==1){
low[nod]=min(low[nod],nv[vecin]);
}
else{
dfs(vecin,niv+1,nod);
low[nod]=min(low[nod],low[vecin]);
if(low[vecin]>=nv[nod]){
k++;
do{
x=s.top();
c[k].push_back(s.top());
s.pop();
}while(x!=vecin);
c[k].push_back(nod);
f[nod]++;
}
}
}
}
}
int main(){
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1,1,0);
for(int i=1;i<=k;i++){
sort(c[i].begin(), c[i].end());
}
fout<<k<<"\n";
for(int i=1;i<=k;i++){
for(int j=0;j<c[i].size();j++){
fout<<c[i][j]<<" ";
}
fout<<"\n";
}
}