Cod sursa(job #1232310)
Utilizator | Data | 22 septembrie 2014 17:32:24 | |
---|---|---|---|
Problema | Parcurgere DFS - componente conexe | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.83 kb |
#include <cstdio>
using namespace std;
struct point
{
int inf;
point *leg;
};
point *g[100001];
void creare (int x, int y)
{
point *prim, *p, *u;
if (g[x]->leg==NULL)
{
prim=new point;
p=new point;
prim->inf=x;
p->inf=y;
prim->leg=p;
p->leg=NULL;
g[x]->leg=prim->leg;
delete prim;
delete p;
}
else
{
p=new point;
bool ok=false;
p->inf=g[x]->inf;
p->leg=g[x]->leg;
while (ok==false)
{
p=p->leg;
if (p->leg==NULL)
{
u=new point;
u->inf=y;
p->leg=u;
u->leg=NULL;
}
}
delete p;
delete u;
}
if (g[y]->leg==NULL)
{
prim=new point;
p=new point;
prim->inf=y;
p->inf=x;
prim->leg=p;
p->leg=NULL;
g[y]->leg=prim->leg;
delete prim;
delete p;
}
else
{
p=new point;
bool ok=false;
p->inf=g[y]->inf;
p->leg=g[y]->leg;
while (ok==false)
{
p=p->leg;
if (p->leg==NULL)
{
u=new point;
u->inf=x;
p->leg=u;
u->leg=NULL;
}
}
delete p;
delete u;
}
}
int main()
{
int n, m, i, x, y;
point *p, *r;
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
scanf("%d%d",&m,&n);
for (i=1; i<=n; i++)
{
g[i]=NULL;
}
for (i=1; i<=n; i++)
{
scanf("%d%d",&x,&y);
p=new point;
r=new point;
p->inf=x;
g[x]=p;
g[x]->leg=NULL;
r->inf=y;
g[y]=r;
g[y]->leg=NULL;
delete p;
delete r;
creare (x,y);
}
fclose(stdin);
fclose(stdout);
return 0;
}