Cod sursa(job #2656546)

Utilizator adiaioanaAdia R. adiaioana Data 7 octombrie 2020 22:48:05
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <stack>
#define pii pair<int,int>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int N,M,nod;
bool viz[500100];
vector <pii> v[100100];
vector <int> sol;
stack <int> st;

void bfs()
{
    pii nn;
    st.push(1);
    while(!st.empty())
    {
        nod=st.top(); st.pop();
        if(v[nod].size()==0) sol.push_back(nod);
        else{
            nn=v[nod].back();
            st.push(nod);
            v[nod].pop_back();
            if(!viz[nn.second])
            {
                st.push(nn.first);
                viz[nn.second]=1;
            }
        }
    }
}

int main()
{
    int fr[3]={0};
    int x,y;

    cin>>N>>M;
    for(int i=1; i<=M; ++i)
    {
        cin>>x>>y;
        v[x].push_back({y,i});
        fr[(v[x].size()-1)%2]--;
        fr[v[x].size()%2]++;
        v[y].push_back({x,i});
        fr[(v[y].size()-1)%2]--;
        fr[v[y].size()%2]++;
    }
    if(fr[1]){
        cout<<-1<<'\n';
        return 0;
    }

    bfs();
    sol.pop_back();
    for(auto it:sol)
        cout<<it<<' ';
    cout<<'\n';
    return 0;
}