Cod sursa(job #2540752)

Utilizator avramraresAvram Rares Stefan avramrares Data 7 februarie 2020 17:48:24
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> G[100004];
vector <int> :: iterator it;
list <int> Q;
int n,m,x,y,sol;
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    for(int i=1;i<=n;i++)
    {
        int l=G[i].size();
        if(l%2==1)
        {
            g<<-1<<'\n';
            return 0;
        }
    }
    Q.push_front(1);
    while(!Q.empty())
    {
        int p=Q.front();
        if(G[p].empty())
        {
            if(sol<m)
                g<<p<<" ";
            sol++;
            Q.pop_front();
        }
        else
        {
            int last=G[p].back();
            G[p].pop_back();
            Q.push_front(last);
            for(it=G[last].begin(); it!=G[last].end(); it++)
            {
                if(*it==p)
                {
                    G[last].erase(it);
                    break;
                }
            }
        }
    }
    return 0;
}