Cod sursa(job #1232310)

Utilizator vlady1997Vlad Bucur vlady1997 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;
        }