Cod sursa(job #1250006)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 27 octombrie 2014 18:56:37
Problema Parcurgere DFS - componente conexe Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;

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

const int N=100001, M=200001;
int n,mu;
int vf[2*M], urm[2*M], lst[N], m, bif[N];

void adauga(int x, int y)
{
    vf[++m] = y;
    urm[m] = lst[x];
    lst[x] = m;
}

void parcurg(int x){
    bif[x]=1;
    int p = lst[x], y;
    while (p != 0)
    {
        y = vf[p];
        //prelucrez y
        bif[y]=1;
        p = urm[p];
    }
}

/*
{1,3}, {1,4}, {1,2}, {2,3}
lst = (5, 7, 8, 4)
vf =  (3,1,4,1,2,1,3,2)
urm = (0,0,1,0,3,0,6,2)
*/
int main()
{
    int i,nr=1,x,y;
    in>>n>>mu;
    for(i=1;i<=mu;i++){
        in>>x>>y;
        adauga(x,y);
        adauga(y,x);
    }
    parcurg(1);
    for(i=1;i<=n;i++){
        //out<<bif[i]<<" ";
        if(bif[i]==0){
            nr++;
            parcurg(i);
        }
    }
    out<<nr;

    return 0;
}