Cod sursa(job #2696694)

Utilizator mateihMatei Hristodorescu mateih Data 16 ianuarie 2021 13:31:44
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#include<vector>

using namespace std;

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

int a[500001],b[500001];

vector<int> v[100001],ans;

bool viz[500001];

int euler (int pz)
{
  while (v[pz].size() != 0)
  {
    int muchia_curenta = v[pz].back();
    v[pz].pop_back();
    if(viz[muchia_curenta])
     continue;
    viz[muchia_curenta]=1;
    int vecin;
    if(a[muchia_curenta] == pz)
      vecin = b[muchia_curenta];
    else
      vecin = a[muchia_curenta];
    euler(vecin);
  }
  ans.push_back(pz);
}


int main () {
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
    cin>>a[i]>>b[i];
    v[a[i]].push_back(i);
    v[b[i]].push_back(i);
}
int ok=1;
for(int i=1;i<=n;i++){
    if(v[i].size()%2==1)
        ok=0;
}
if(ok==0)
    cout<<-1;
else{
    euler(1);
    for(int i=0;i<ans.size()-1;i++)
        cout<<ans[i]<<" ";
}


}