Cod sursa(job #2201358)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 4 mai 2018 15:25:29
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100010
#define MMAX 500010

using namespace std;

int n,m,x,y,sz;
int ans[MMAX];
bool ms[MMAX];
vector<pair<int,int>> nd[NMAX];
void euler(int nod){
  for(int ma=0;ma<nd[nod].size();ma++){
    if(ms[nd[nod][ma].second])continue;
    ms[nd[nod][ma].second]=true;
    euler(nd[nod][ma].first);
  }
  ans[++sz]=nod;
}

int main()
{
    ifstream f ("ciclueuler.in");
    ofstream g ("ciclueuler.out");
    f>>n>>m;
    for(int i=1;i<=m;i++)
      f>>x>>y,
      nd[x].push_back(make_pair(y,i)),
      nd[y].push_back(make_pair(x,i));
    for(int i=1;i<=n;i++)
      if(nd[i].size()%2){
        g<<"-1\n";
        return 0;
      }
    for(int i=1;i<=n;i++)
      if(nd[i].size()){
        euler(i);
        break;
      }
    for(int i=1;i<sz;i++) g<<ans[i]<<" ";
    f.close ();
    g.close ();
    return 0;
}