Cod sursa(job #1514804)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 31 octombrie 2015 17:03:46
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;

FILE *fin,*fout;
int n,m,x,y;
vector<int> nb[100001];
vector<int> q;
int sol[500001],p,val,nod;
bool f;

int main()
{
    fin=fopen("ciclueuler.in","r");
    fout=fopen("ciclueuler.out","w");

    fscanf(fin,"%d %d",&n,&m);

    for(int i=1;i<=m;i++)
    {
        fscanf(fin,"%d %d",&x,&y);
        {
            nb[x].push_back(y);
            nb[y].push_back(x);
        }
    }

    for(int i=1;i<=n;i++)
    {
        if(nb[i].size()%2==1)
        {
            f=1;
            break;
        }
    }

    if(f==1)
    {
        fprintf(fout,"-1");
    }
    else
    {
        q.push_back(1);
        for(int i=1;i<=n;i++)
        {
            while(!q.empty())
            {
                if(nb[q.back()].empty()!=1)
                {
                    val=nb[q.back()].back();
                    nb[q.back()].pop_back();
                    nb[val].erase(find(nb[val].begin(),nb[val].end(),q.back()));
                    q.push_back(val);
                }
                else
                {
                    p++;
                    sol[p]=q.back();
                    q.pop_back();
                }


            }
        }
        for(int i=1;i<p;i++)
        {
            fprintf(fout,"%d ",sol[i]);
        }
    }
}