Pagini recente » Cod sursa (job #1638592) | Cod sursa (job #1731023) | Cod sursa (job #3303408) | Cod sursa (job #3307363) | Cod sursa (job #3309089)
/*
de ce pula mea nu merge aceasta versiune
*/
#include <fstream>
#include <vector>
#define ll long long
using namespace std;
const int NMAX = 1e5;
vector <int> g[NMAX + 1];
int low[NMAX + 1];
int enter[NMAX + 1];
bool art[NMAX + 1];
vector <int> cur;
vector <vector <int> > comps;
void compute_bcc(int nod)
{
comps.push_back(vector <int> ());
while (cur.back() != nod)
{
comps.back().push_back(cur.back());
cur.pop_back();
}
comps.back().push_back(nod);
}
int n;
void dfs(int nod, int parent)
{
cur.push_back(nod);
static int time = 0;
enter[nod] = ++time;
low[nod] = enter[nod];
for (int x : g[nod])
{
if (enter[x] == 0)
{
dfs(x, nod);
if (enter[nod] <= low[x])
{
art[nod] = (enter[nod] > 1 or enter[x] > 2);
compute_bcc(nod);
}
low[nod] = min(low[nod], low[x]);
}
else
low[nod] = min(low[nod], enter[x]);
}
}
signed main()
{
ifstream cin("biconex.in");
ofstream cout("biconex.out");
int m, i;
cin >> n >> m;
for (i = 1; i <= m; i++)
{
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1, 0);
cout << comps.size() << "\n";
for (i = 0; i < comps.size(); i++, cout << "\n")
for (int x : comps[i])
cout << x << " ";
}