Pagini recente » Cod sursa (job #78963) | Cod sursa (job #2254096) | Cod sursa (job #794101) | Cod sursa (job #2001493) | Cod sursa (job #1527537)
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstring>
#include <functional>
#include <stack>
#define MOD 1000000007
#define NMAX 5002
#define MMAX 505
#define INF 1000000000
using namespace std;
FILE *fin = freopen("biconex.in", "r", stdin);
FILE *fout = freopen("biconex.out", "w", stdout);
vector<vector<int> > v(100000);
int low[100000], dfn[100000];
int nr, start = 1, nrfii;
stack<pair<int, int> > S;
void DFS(int u, int pu);
void afisCompBiconexa(int x, int u);
int main() {
int n, i, j, m, k, lim;
scanf("%d%d", &n, &m);
for(i=0;i<m;++i) {
scanf("%d%d", &x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
void DFS(start, 0);
return 0;
}
void DFS(int u, int pu) {
int x, px;
low[u]=dfn[u]=nr;
for(i=0;i<v[u].size();++i) {
x = v[u][i];
if(x != pu && dfn[x] < dfn[u])
S.push({u, x});
if(dfn[x] != -1) {
if(x == start)
nrfii++;
DFS(x, u);
low[u] = min(low[u], low[x]);
if(low[x] >= dfn[u]) {
afisCompBiconexa(x, u);
}
}
}
}
void afisCompBiconexa(int x, int u) {
pair <int, int> p
p = S.top();
S.pop();
do {
printf("%d%d", p.first, p.second);
p = S.top();
S.pop();
} while (p.first != u && p.second != x);
}