Cod sursa(job #2696698)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 16 ianuarie 2021 13:35:50
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector <int> v[1000001];
vector <int> ans;
int a[500001],b[500001],ver[500001];
int ok;
void euler(int poz)
{
    while(v[poz].size())
    {
        int m_cur=v[poz].back();
        v[poz].pop_back();
        if(ver[m_cur])
            continue;
        ver[m_cur]=1;
        int vecin;
        if(a[m_cur]==poz)
            vecin=b[m_cur];
        else
            vecin=a[m_cur];
        euler(vecin);
    }
    ans.push_back(poz);
}
int main()
{
    int n,m,i;
    in>>n>>m;
    for(i=1;i<=m;i++)
    {
        in>>a[i]>>b[i];
        v[a[i]].push_back(i);
        v[b[i]].push_back(i);
    }
    for(i=1;i<=n;i++)
    {
        if(v[i].size()%2==1)
        {
            out<<"-1";
            return 0;
        }
    }
    euler(1);
    for(auto it:ans)
        out<<it<<" ";
    return 0;
}