Cod sursa(job #359665)
#include<stdio.h>
#define M 100000
FILE *f=fopen("dfs.in","r");
FILE *g=fopen("dfs.out","w");
long n,m;
long viz[M],x[M*10],y[M*10];
void citire()
{
long i;
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=m;i++)
fscanf(f,"%ld%ld",&x[i],&y[i]);
for(i=1;i<=n;i++)
viz[i]=-1;
fclose(f);
}
void dfs(long nod,long nr)
{
long i,c[M*10],p,u;
p=u=1;
viz[nod]=nr;
c[p]=nod;
while(p<=u)
{
nod=c[p];
for(i=1;i<=m;i++)
if(x[i]==nod) {u++;
c[u]=y[i];
viz[y[i]]=nr;}
p++;
}
}
int main()
{
citire();
long nr,i, nod;
nr=nod=1;
dfs(nod,nr);
int ok=1;
while(ok)
{
ok=0;
for(i=1;i<=n;i++)
if(viz[i]==-1) {nr++;
nod=i;
ok=1;
dfs(nod,nr);}
}
fprintf(g,"%ld\n",nr);
fclose(g);
return 0;
}