Cod sursa(job #3213446)

Utilizator radu._.21Radu Pelea radu._.21 Data 13 martie 2024 10:04:57
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,f[500001];
vector<int>G[100001];
pair<int,int>muchie[500001];
int rez[5000001],cnt=0,grad[100001];
int main(){
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y; fin>>x>>y;
        muchie[i]={x,y};
        G[x].push_back(i);
        G[y].push_back(i);
        grad[x]++;
        grad[y]++;
    }
    for(int i=1;i<=n;i++)
    if(grad[i]%2==1){
        fout<<-1;
        return 0;
    }
    stack<int>stiva;
    stiva.push(1);
    while(!stiva.empty()){
        int nod = stiva.top();
        int ok = 0;
        while(G[nod].size()){
            int it = G[nod].back();
             G[nod].pop_back();
            if(f[it]==1){
              continue;
            }
            else{
                f[it]=1;
                //G[nod].pop_back();
                int x = muchie[it].first;
                int y = muchie[it].second;
                if(y!=nod)
                     stiva.push(y);
                    else
                        stiva.push(x);
                ok=1;
            //    stiva.push(y);
                break;
            }
        }


        if(ok==0){
            rez[++cnt]=nod,stiva.pop();
        }
    }
   // cout<<cnt<<'\n';
   if(cnt!=m-1){
    fout<<-1;
    return 0;
   }
    for(int i=1;i<cnt;i++)
        fout<<rez[i]<<" ";
    return 0;
}