Cod sursa(job #2373236)

Utilizator Daria09Florea Daria Daria09 Data 7 martie 2019 12:48:13
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct graf
{
    int x,ind;
};
vector <graf> graph[dim];
vector <int> Answer;
int n,m,degree[dim];
bool seen[5*dim];
void Read()
{
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        int x,y;
        f>>x>>y;
        graph[x].push_back({y,i});
        graph[y].push_back({x,i});
        degree[x]++;
        degree[y]++;
    }
}
void Euler(int node)
{
    while(!graph[node].empty())
    {
        while(!graph[node].empty()&&seen[graph[node].back().ind])graph[node].pop_back();
        if(!graph[node].empty())
        {
            int x=graph[node].back().x;
            seen[graph[node].back().ind]=1;
            graph[node].pop_back();
            Euler(x);
        }
    }
    Answer.push_back(node);
}
void Solve()
{
    for(int i=1;i<=n;++i)
        if(degree[i]%2==1)
    {
        g<<-1;
        return;
    }
    Euler(1);
    for(int i=1;i<=m;++i)
        if(!seen[i])
    {
        g<<-1;
        return;
    }
    Answer.pop_back();
    for(int i=0;i<Answer.size();++i)
        g<<Answer[i]<<" ";
}
int main()
{
    Read();
    Solve();
    return 0;
}