Cod sursa(job #1336397)

Utilizator bogdanboboc97Bogdan Boboc bogdanboboc97 Data 7 februarie 2015 17:53:39
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector< vector<int> > a;
vector<bool> v;
vector<int> s;
stack<int> st;
int n,m;
void euler(int x)
{
    st.push(x);
    while(!st.empty())
    {
        int k=st.top();
        if(a[k].size())
        {
            int y=a[k].back();
            a[k].pop_back();
            a[y].erase(find(a[y].begin(),a[y].end(),k));
            st.push(y);
        }
        else{
            st.pop();
            s.push_back(k);
        }
    }
}
void dfs(int x)
{
    v[x]=true;
    for(auto i: a[x])
        if(!v[i])
        dfs(i);
}
int main()
{
    int x,y;
    in>>n>>m;
    a=vector< vector<int> >(n+1);
    v=vector<bool>(n+1);
    for(int i=1;i<=m;i++)
    {
        in>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    dfs(1);
    for(int i=1;i<=n;i++)
    if(v[i]==false || a[i].size()%2)
    {
        out<<-1;
        return 0;
    }
    euler(1);
    for(int i=0;i<m;i++)out<<s[i]<<' ';
    return 0;
}