Pagini recente » Cod sursa (job #2052949) | Cod sursa (job #3353057) | Cod sursa (job #1541285) | Cod sursa (job #628941) | Cod sursa (job #2264172)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#define dMAX 100000
using namespace std;
int n, m, x, y, nrComp;
int myStack[dMAX + 2], h;
vector<int> graf[dMAX + 2];
vector<int> componente[dMAX + 2];
bool viz[dMAX + 2];
int nivel[dMAX + 2], nivmin[dMAX + 2];
ifstream fin("biconex.in");
ofstream fout("biconex.out");
void DFS(int k, int p) {
viz[k] = true;
myStack[++h] = k;
nivel[k] = nivel[p] + 1;
nivmin[k] = nivel[k];
int i, j, newV;
for (i = 0; i < graf[k].size(); i++) {
newV = graf[k][i];
if (viz[newV]) {
nivmin[k] = min(nivmin[k], nivel[newV]);
} else {
DFS(newV, k);
nivmin[k] = min(nivmin[k], nivmin[newV]);
if (nivel[k] <= nivmin[newV]) {
nrComp++;
componente[nrComp].push_back(k);
while (myStack[h] != newV) {
componente[nrComp].push_back(myStack[h--]);
}
componente[nrComp].push_back(myStack[h--]);
}
}
}
}
int main()
{
int i, j;
fin >> n >> m;
for (i = 1; i <= m; i++) {
fin >> x >> y;
graf[x].push_back(y);
graf[y].push_back(x);
}
DFS(1, 0);
fout << nrComp << '\n';
for (i = 1; i <= nrComp; i++) {
for (j = 0; j < componente[i].size(); j++) {
fout << componente[i][j] << ' ';
}
fout << '\n';
}
return 0;
}