Cod sursa(job #1527537)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 18 noiembrie 2015 11:58:13
Problema Componente biconexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#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);
}