Cod sursa(job #1892534)

Utilizator jordan1998Jordan jordan1998 Data 25 februarie 2017 01:46:06
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define no 100002
#define mu 500002
#define pb push_back
int i,n,m,a,b,ls,st[mu];
bool fol[mu];
struct _muchie{
    int a, b;
} muchie[500001]={0};
std::vector <int> v[no],sta;
int main()
{
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
    f>>a>>b;
    v[a].pb(i);
    v[b].pb(i);
    muchie[i].a = a;
    muchie[i].b = b;
}
for(i=1;i<=n;i++)
if(v[i].size()%2) {g<<"-1";return 0;}
sta.push_back(1);
//euler
while(sta.size())
{
    a=sta.back();//a e nod
    if(v[a].size()){
        b=v[a].back();//b e muchie
        v[a].pop_back();
        if(fol[b]==0)//daca n am folosit muchia
        {
            fol[b]=1;//o folosesc
            if(muchie[b].a==a) sta.pb(muchie[b].b);
            else sta.pb(muchie[b].a);
        }
    }
    else st[++ls]=a,sta.pop_back();
}
for(i=1;i<=m;i++)
    g<<st[i]<<" ";
}