Pagini recente » Monitorul de evaluare | Concursuri Virtuale | Monitorul de evaluare | Cod sursa (job #745538) | Cod sursa (job #695832)
Cod sursa(job #695832)
#include <fstream>
#include <stdio.h>
using namespace std;
FILE * dfs;
ofstream g("dfs.out");
struct nod
{
long inf;
nod *urm;
};
nod *p[100003],*ultim[100003];
long viz[100003];
long i,m,n,x,d;
void creare()
{
for (i=1;i<=n;i++)
{
p[i]=new nod;
p[i]->inf=0;
p[i]->urm=NULL;
ultim[i]=p[i];
}
}
void citire()
{
long y;
nod *q;
for (i=1;i<=m;i++)
{
fscanf(dfs,"%ld %ld",&x,&y);
q=new nod;
q->inf=y;
q->urm=NULL;
ultim[x]->urm=q;
ultim[x]=q;
q=new nod;
q->inf=x;
q->urm=NULL;
ultim[y]->urm=q;
ultim[y]=q;
}
}
void sterg()
{
nod *q;
for (i=1;i<=n;i++)
{
q=p[i];
p[i]=p[i]->urm;
q->urm=NULL;
delete q;
}
}
void df(long x)
{
nod *q;
viz[x]=d;
q=p[x];
while (q)
{
if (!viz[q->inf])
df(q->inf);
q=q->urm;
}
}
int main()
{
dfs=fopen("dfs.in","r");
fscanf(dfs,"%ld %ld",&n,&m);
creare();
citire();
sterg();
d=1;
for (i=1;i<=n;i++)
if (!viz[i])
{
df(i);
d++;
}
d--;
g<<d<<'\n';
g.close();
return 0;
}