Pagini recente » Cod sursa (job #2988098) | Cod sursa (job #348424) | Cod sursa (job #279178) | Cod sursa (job #2989881) | Cod sursa (job #359680)
Cod sursa(job #359680)
#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 &u)
{
long i,c[M*10],p;
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&& viz[y[i]]==-1) {u++;
c[u]=y[i];
viz[y[i]]=nr;}
else if(y[i]==nod && viz[x[i]]==-1) {u++;
c[u]=x[i];
viz[x[i]]=nr;}
p++;
}
}
int main()
{
citire();
long nr,p,i, nod;
nr=nod=1;
dfs(nod,nr,i);
int ok=1;
while(ok)
{
long k=0,t;
for(i=1;i<=n;i++)
if(viz[i]==-1) {p=i;k++;}
if(k!=0) {nr++;
nod=p;
dfs(nod,nr,t);
}
if(t==k) ok=0;
else ok=1;
}
fprintf(g,"%ld\n",nr);
fclose(g);
return 0;
}