Cod sursa(job #928871)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 26 martie 2013 19:03:36
Problema Componente biconexe Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
#include<vector>
#include<utility>
#define f first
#define s second
#define NMAX 100010

using namespace std;

ifstream f("biconex.in");
ofstream g("biconex.out");

int n, m, nr=0, comp=0, dfn[NMAX], low[NMAX];

vector<int> v[NMAX];
vector< pair<int,int> > a[NMAX];

void Citeste()
{
    int i, x, y;

    f>>n>>m;

    for (i=1; i<=m; ++i)
    {
        f>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
}

void Biconex(int nod, int tata)
{
    int i, x;

    dfn[nod]=low[nod]=++nr;

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

        if (x!=tata && dfn[x]<dfn[nod])
        {
            a[comp].push_back( make_pair(x, nod) );
        }

        if (!dfn[x])
        {
            Biconex(x, nod);

            low[nod]=min(low[nod], low[x]);

            if (low[x]>=dfn[nod])
            {
                ++comp;
            }
        }
        else
            if (x!=tata) low[nod]=min(low[nod], dfn[x]);

    }
}

void Scrie()
{
    g<<comp<<"\n";
}


int main()
{
    Citeste();

    Biconex(1, -1);

    Scrie();

    f.close();
    g.close();
    return 0;
}