Cod sursa(job #2722717)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 13 martie 2021 11:21:51
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>

const int MAXN = 1e5 + 1,MAXM = 5e5 + 1;

using namespace std;

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

vector<int>graf[MAXN];
bool viz[MAXM];
int n,m,from[MAXN],to[MAXM];
vector<int>ans;

void dfs(int nod){
    for(auto label : graf[nod]){
        /// am label-ul muchiilor
        if(!viz[label]){
            /// from -> to | nod;
            int vecin;
            if(nod == from[label])
                vecin = to[label];
            else
                vecin = from[label];
            viz[label] = true;
            dfs(vecin);
            ans.push_back(nod);
        }
    }
}


int main()
{
    in>>n>>m;
    for(int i = 1; i <= m; i++){
        int x,y;
        in>>x>>y;
        graf[x].push_back(i);
        graf[y].push_back(i);
        from[i] = x;
        to[i] = y;
    }
    for(int i = 1; i <= n; i++){
        if(graf[i].size() & 1){
            out<<-1;
            return 0;
        }
    }
    ans.push_back(1);
    dfs(1);
    for(int i = 1; i <= m; i++){
        if(!viz[i]){
            out<<-1;
            return 0;
        }
    }
    for(int i = 0; i < ans.size() - 1; i++)
        out<<ans[i]<<" ";
    return 0;
}