Pagini recente » Cod sursa (job #2613394) | Cod sursa (job #2207853) | Cod sursa (job #879901) | Cod sursa (job #1704881) | Cod sursa (job #2573026)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
const int nmax = 100005;
int n, m;
vector <int> g[nmax];
int niv[nmax], low[nmax];
int viz[nmax];
inline void read()
{
fin >> n >> m;
while (m--)
{
int a, b;
fin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
}
int cnt;
stack <int> st;
vector <int> sol[nmax];
inline void dfs(int nod)
{
st.push(nod);
viz[nod] = 1;
low[nod] = niv[nod];
for (unsigned int i = 0; i < g[nod].size(); i++)
{
int vecin = g[nod][i];
if (viz[vecin])
{
low[nod] = min(low[nod], niv[vecin]);
continue;
}
niv[vecin] = niv[nod] + 1;
dfs(vecin);
low[nod] = min(low[nod], low[vecin]);
if (niv[nod] <= low[vecin]) //avem o comp
{
sol[++cnt].push_back(nod);
int x;
do
{
x = st.top();
st.pop();
sol[cnt].push_back(x);
}while (x != vecin);
}
}
}
inline void solve()
{
for (int i = 1; i <= n; i++)
if (!viz[i])
niv[i] = 1, dfs(i);
fout << cnt << "\n";
for (int i = 1; i <= cnt; i++)
{
for (int j : sol[i])
fout << j << " ";
fout << "\n";
}
}
int main()
{
read();
solve();
return 0;
}