Pagini recente » Cod sursa (job #1136748) | Cod sursa (job #2110848) | Cod sursa (job #1026589) | Cod sursa (job #2230799) | Cod sursa (job #2374263)
#include <bits/stdc++.h>
#define dim int(1e5)+5
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
int n,m,vf,comp;
bool seen[dim];
int low[dim],lvl[dim],st[dim];
vector <int> graph[dim],ans[dim];
void Read()
{
f>>n>>m;
for(int i=1;i<=m;++i)
{
int x,y;
f>>x>>y;
graph[x].push_back(y);
graph[y].push_back(x);
}
}
void Dfs(int node,int daddy,int nivel)
{
st[++vf]=node;
low[node]=nivel;
lvl[node]=nivel;
seen[node]=1;
for(int i=0;i<graph[node].size();++i)
{
int son=graph[node][i];
if(son==daddy)continue;
if(seen[son])
{
low[node]=min(low[node],lvl[son]);
continue;
}
Dfs(son,node,nivel+1);
low[node]=min(low[node],low[son]);
if(low[son]>=lvl[node])
{
comp++;
do
{
ans[comp].push_back(st[vf--]);
}while(st[vf+1]!=son);
ans[comp].push_back(node);
}
}
}
void Solve()
{
Dfs(1,0,1);
g<<comp<<'\n';
for(int i=1;i<=comp;++i)
{
for(int j=0;j<ans[i].size();++j)
g<<ans[i][j]<<" ";
g<<'\n';
}
}
int main()
{
Read();
Solve();
return 0;
}