Pagini recente » Cod sursa (job #263809) | Cod sursa (job #2678812) | Cod sursa (job #2954224) | Cod sursa (job #1817405) | Cod sursa (job #1112969)
#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;
}