Cod sursa(job #2248700)

Utilizator Daria09Florea Daria Daria09 Data 29 septembrie 2018 13:16:13
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int dim=1e5+5;
int nodes,edges,degree[dim];
vector <list<int> > graph(dim);
stack <int> st;
void read()
{
    f>>nodes>>edges;
    for(int i=1;i<=edges;++i)
    {
        int x,y;
        f>>x>>y;
        graph[x].push_front(y);
        graph[y].push_front(x);
        degree[x]++;
        degree[y]++;
    }
    f.close();
}
void RemoveEdge(int node1,int node2)
{
    graph[node1].erase(find(graph[node1].begin(),graph[node1].end(),node2));
    graph[node2].erase(find(graph[node2].begin(),graph[node2].end(),node1));
}
void task()
{
    for(int i=1;i<=nodes;i++)
        if(degree[i]%2==1)
    {
        g<<-1;
        return;
    }
    st.push(1);
    while(!st.empty())
    {
        int node=st.top();
        if(!graph[node].empty())
        {
            int next=graph[node].front();
            st.push(next);
            RemoveEdge(node,next);
        }
        else
        {
            st.pop();
            if(!st.empty())
                g<<node<<" ";
        }
    }
}
int main()
{
    read();
    task();
    return 0;
}