Cod sursa(job #2820875)

Utilizator bogdan2405Strat Bogdan-Valentin bogdan2405 Data 21 decembrie 2021 20:04:09
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include<bits/stdc++.h>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

vector<pair<int,bool>> adjList[100001];
stack<int> st;
vector<int> euler;
int visited[100001]; //pentru muchii

int main(){
    int n,m,a,b;
    f>>n>>m;

    int i;
    //visited.assign(m+1,0);
    for(i=0;i<m;++i){
        f>>a>>b;
        adjList[a-1].push_back(make_pair(b-1,i));
        adjList[b-1].push_back(make_pair(a-1,i));
    }
    int ok=1;

    for(i=0;i<n;++i){
        if(adjList[i].size()%2==1){
                ok=0;
                break;
        }
    }

    if(ok==0){
        g<<-1;
    }
    else{
        st.push(0);

        while(!st.empty()){
            
            int node=st.top();

            
            if(adjList[node].size()!=0){

                int next=adjList[node].back().first;
                int j=adjList[node].back().second;
                adjList[node].pop_back();

                if(visited[j]==0){
                    visited[j]=1;
                    st.push(next);
                }
                
            }
            else
            {
                euler.push_back(node);
                st.pop();
            }
        }
    }
    
    for(i=0;i<euler.size();++i){
        g<<euler[i]+1<<' ';
    }

    return 0;
}