Pagini recente » Cod sursa (job #9213) | Cod sursa (job #1163912) | Cod sursa (job #2052362) | Cod sursa (job #1381157) | Cod sursa (job #662824)
Cod sursa(job #662824)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
vector<int> g[100001];
vector<int> c[100001];
int stiva[100001], how_high[100001], p[100001], n, m;
int viz[100001], sd, t;
void adauga(int nod) {
++t;
while(stiva[sd] != nod) {
c[t].pb(stiva[sd]);
--sd;
}
c[t].pb(stiva[sd]);
--sd;
}
void dfs(int nod, int bk) {
viz[nod] = 1;
stiva[++sd] = nod;
p[nod] = p[bk] + 1;
how_high[nod] = p[nod];
int mlev = p[nod], i;
for(i = 0; i < g[nod].size(); ++i) {
if(viz[g[nod][i]])
mlev = min(mlev, p[g[nod][i]]);
else {
dfs(g[nod][i], nod);
how_high[nod] = min(how_high[nod], how_high[g[nod][i]]);
if(how_high[g[nod][i]] == p[nod]) {
adauga(g[nod][i]);
c[t].pb(nod);
}
}
}
how_high[nod] = min(how_high[nod], mlev);
}
int main() {
int i, j, x, y;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
fin >> n >> m;
for(i = 1; i <= m; ++i) {
fin >> x >> y;
g[y].pb(x);
g[x].pb(y);
}
dfs(1, 0);
for(i = 1; i <= t; ++i) {
for(j = 0; j < c[i].size(); ++j) {
fout << c[i][j] << ' ';
}
fout << '\n';
}
fout.close();
return 0;
}