Cod sursa(job #1112969)

Utilizator dascalutudorDascalu Tudor dascalutudor Data 20 februarie 2014 10:49:51
Problema Parcurgere DFS - componente conexe Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;
ifstream in("dfs.in");
ofstream out("dfs.out");
const int Nmax=100000;
const int Mmax=200000;
int n,m,d;
unsigned short mat[Nmax][Nmax/16],r;
void setmat(int a,int b)
{   unsigned short col,masca=32768,bit;
    col=b/16;
    bit=b%16;
    masca=masca>>bit;
    mat[a][col]=mat[a][col]|masca;


}
int get(int a,int b)
{   unsigned short col,masca=32768,bit;
    col=b/16;
    bit=b%16;
    masca=masca>>bit;
    masca=masca&mat[a][col];
    if(masca>0) return 1;
    else return 0;
}
void dfs(int ns)
{   int i;
    setmat(0,ns);

    for(i=1;i<=n;i++)
    if(get(0,i)==0)
    if(get(ns,i)==1)
    {
        r++;
        dfs(i);

    }



}
int main()
{
    int a,b,i;
    in>>n>>m;
    for(i=1;i<=m;i++)
    {   in>>a>>b;
        setmat(a,b);
        setmat(b,a);
    }
    //out<<get(1,4);

   for(i=1;i<=n;i++)

    {   if(get(0,i)==0)
        {dfs(i);
            d++;
        }
    }
    out<<d;

    return 0;
}