Cod sursa(job #1276478)

Utilizator tdr_drtTdr Drt tdr_drt Data 26 noiembrie 2014 14:42:14
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int> q[100001];
int n,m,x,y;

void euler()
{
    stack<int> querry;
    querry.push(1);
    while(!querry.empty())
    {
        x=querry.top();
        if(q[x].size()==0)
        {
            querry.pop();
            if(!querry.empty())
            g<<x<<" ";
        }
        else
        {
            y=q[x][q[x].size()-1];
            querry.push(y);
            q[y].erase(find(q[y].begin(), q[y].end(), x));
            q[x].pop_back();
        }
    }
}

int main(){
 f>>n>>m;
 for(int i=1;i<=m;i++)
  {
    f>>x>>y;
    q[x].push_back(y);
    q[y].push_back(x);
  }

  for(int i=1;i<=n;i++)
   if(q[i].size()%2==1) {g<<-1; return 0;}

  euler();

 return 0;
}