Pagini recente » Cod sursa (job #2772688) | Cod sursa (job #905985) | Cod sursa (job #344011) | Cod sursa (job #1126382) | Cod sursa (job #316452)
Cod sursa(job #316452)
#include<cstdio>
using namespace std;
struct graf
{
int nod;
graf *next;
};
graf *x[100010],*last[100010];
int viz[100010],c[100010];
int add(int a, int b)
{
graf *p;
p=new graf;
if (x[a]==NULL)
{
p->nod=b;
p->next=NULL;
x[a]=p;
last[a]=p;
}
else
{
p->nod=b;
p->next=NULL;
last[a]->next=p;
last[a]=p;
}
}
int exista(int n)
{
int i;
for (i=1;i<=n;i++)
if (viz[i]==0)
return i;
return 0;
}
int main()
{
int n,m,i,a,b,ex,nr=0,j;
graf *p;
FILE *f=fopen("dfs.in","r");
FILE *g=fopen("dfs.out","w");
fscanf(f,"%d %d ",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d %d ",&a,&b);
add(a,b);
add(b,a);
}
ex=exista(n);
nr++;
c[1]=ex;
i=1;
j=1;
viz[ex]=1;
while (ex)
{
while (c[i])
{
p=x[c[i]];
while (p&&viz[p->nod]==0)
{
j++;
c[j]=p->nod;
viz[p->nod]=1;
p=p->next;
}
i++;
}
ex=exista(n);
nr++;
c[i]=ex;
viz[ex]=1;
}
nr--;
fprintf(g,"%d ",nr);
fclose(f);
fclose(g);
return 0;
}