Pagini recente » Cod sursa (job #2086181) | Cod sursa (job #629438) | Cod sursa (job #1131079) | Cod sursa (job #1488646) | Cod sursa (job #3036474)
#include<bits/stdc++.h>
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
int n,m,niv[100005],dp[100005],st[100005],k,cnt;
vector<int>v[100005],w[100005];
void dfs_tree(int nod)
{
st[++k]=nod;
dp[nod]=niv[nod];
for(auto it:v[nod])
{
if(niv[it]!=0)
dp[nod]=min(dp[nod],niv[it]);
else
{
niv[it]=niv[nod]+1;
dfs_tree(it);
dp[nod]=min(dp[nod],dp[it]);
if(dp[it]>=niv[nod])
{
cnt++;
while(st[k]!=it)
{
w[cnt].push_back(st[k]);
k--;
}
w[cnt].push_back(st[k]);
k--;
w[cnt].push_back(nod);
}
}
}
}
signed main()
{
int i,x,y;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(i=1;i<=n;i++)
{
if(niv[i]==0)
niv[i]=1,dfs_tree(i);
}
g<<cnt<<'\n';
for(i=1;i<=cnt;i++)
{
for(auto it:w[i])
g<<it<<" ";
g<<'\n';
}
return 0;
}