Cod sursa(job #1317392)

Utilizator rosugabriel98Rosu Gabriel rosugabriel98 Data 14 ianuarie 2015 21:03:42
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 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 dfs(int x){
    bif[x]=1;
    int p = lst[x], y;
    while (p != 0)
    {
        y = vf[p];
        if(bif[y]==0){
        //prelucrez y
            dfs(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);
    }
    dfs(1);
    for(i=1;i<=n;i++){
        //out<<bif[i]<<" ";
        if(bif[i]==0){
           // out<<i<<" ";
            nr++;
            dfs(i);
        }
    }
    out<<nr;
 
    return 0;
}