Pagini recente » Cod sursa (job #861002) | Cod sursa (job #2639281) | Cod sursa (job #2117107) | Cod sursa (job #2510781) | Cod sursa (job #2667547)
#include <bits/stdc++.h>
using namespace std;
ifstream in("biconex.in");
ofstream out("biconex.out");
vector<int> graf[100005];
stack<int> s;
vector<vector<int>> sol;
int n,m;
int nivel[100005],low[100005];
void component(int node, int son)
{
vector<int> comp;
int c;
do
{
c = s.top();
s.pop();
comp.emplace_back(c);
}
while (c != son);
comp.emplace_back(node);
sol.emplace_back(comp);
}
void dfs(int node, int parent, int idc)
{
nivel[node] = idc;
low[node] = idc;
for(auto it:graf[node]){
if(it==parent)
continue;
if(!nivel[it])
{
s.push(it);
dfs(it,node,idc+1);
low[node] = min(low[node],low[it]);
if(low[it]>=nivel[node])
component(node,it);
}
else
low[node] = min(low[node],low[it]);
}
}
int main()
{
in>>n>>m;
for(int i=0;i<m;i++)
{
int a,b;
in>>a>>b;
graf[a].emplace_back(b);
graf[b].emplace_back(a);
}
/* for(int i=1;i<=n;i++)
{
cout<<i<<':';
for(auto it:graf[i])
cout<<it<<' ';
cout<<endl;
}*/
dfs(1,0,1);
out<<sol.size()<<endl;
for(int i=0;i<sol.size();i++)
{
for(auto it:sol[i])
out<<it<<' ';
out<<endl;
}
return 0;
}