Cod sursa(job #1528387)

Utilizator felixiPuscasu Felix felixi Data 19 noiembrie 2015 17:02:35
Problema Componente biconexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream in("biconexe.in");
ofstream out("biconexe.out");

const int NMAX = 100000;

vector <int> G[NMAX+2];
int N, M;
int d[NMAX+2], l[NMAX+2], c[NMAX+2], t[NMAX+2], time = 0;
int TAT = 0, FII = 0;

void MAGIC_DFS( int nod ) {
    d[nod] = ++time;
    l[nod] = time;

    for( int i = 0;  i < (int)G[nod].size();  ++i ) {
        int v = G[nod][i];

        if( !d[v] ) {  ///  v este FIU lui NOD
            t[v] = nod;
            FII += ( nod == TAT );
            MAGIC_DFS( v );
            if( l[v] >= d[nod] ) {
                c[nod] = 1;
            }
            l[nod] = min( l[v], l[nod] );
        }
        else {  ///  v = TATAL luui NOD
            if( t[nod] != v ) {
                l[nod] = min( l[nod], d[v] );
            }
        }
    }
}



int main()
{
    in >> N >> M;
    for( int i = 1;  i <= M;  ++i ) {
        int x,y;
        in >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }

    TAT = 1;
    MAGIC_DFS(1);
    out << FII << '\n';
    for( int i = 1;  i <= N;  ++i )  out << c[i] << ' ';
    return 0;
}