Cod sursa(job #1886904)

Utilizator mihnea00Duican Mihnea mihnea00 Data 21 februarie 2017 11:16:56
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int n,i,M,j,nod;
vector<int> l[500010],stk,ans;
struct muchie
{
    int p1,p2;
    bool scris;
} m[500010];

int main()
{
    fin>>n>>M;
    for(i=1;i<=M;++i)
    {
        fin>>m[i].p1>>m[i].p2;
        l[m[i].p1].push_back(i);
        l[m[i].p2].push_back(i);
    }
    for(i=1;i<=n;++i)
    {
        if(l[i].size()%2==1)
        {
            fout<<-1;
            return 0;
        }
    }

    stk.push_back(1);
    while(!stk.empty())
    {
        nod=stk.back();
        if(!l[nod].empty())
        {
            i=l[nod].back();
            l[nod].pop_back();
            if(m[i].scris==0)
            {
                m[i].scris=1;
                if(m[i].p1==nod)
                {
                    stk.push_back(m[i].p2);
                }
                else
                {
                    stk.push_back(m[i].p1);
                }
            }
        }
        else
        {
            ans.push_back(stk.back());
            stk.pop_back();
        }
    }
    for(i=0;i<ans.size();++i)
    {
        fout<<ans[i]<<" ";
    }
    return 0;
}