Cod sursa(job #2492779)

Utilizator mihai2003LLL LLL mihai2003 Data 15 noiembrie 2019 11:38:31
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>

struct muchie{
    int x,y;
    int valid;
    muchie(int x_,int y_){
        x=x_;
        y=y_;
        valid=1;
    }
};

const int NMAX=100001;
std::ifstream in("ciclueuler.in");
std::ofstream out("ciclueuler.out");
std::vector<muchie>muchii;
std::vector<int>v[NMAX];
std::vector<int>sol;
int nr[NMAX];

void dfs(int nod){
    while(nr[nod]){
        for(int i=0;i<v[nod].size();i++){
            int m=v[nod][i];
            if(muchii[m].valid){
                muchii[m].valid=0;
                nr[nod]--;
                if(nod==muchii[m].x)
                    nr[muchii[m].y]--,dfs(muchii[m].y);
                else
                    nr[muchii[m].x]--,dfs(muchii[m].x);
                }
        }
    }
    sol.push_back(nod);
}

int main(){
    int n,m;
    in>>n>>m;
    for(int i=0,x,y;i<m;i++){
        in>>x>>y;
        muchii.push_back(muchie(x,y));
        v[x].push_back(muchii.size()-1);
        v[y].push_back(muchii.size()-1);
        nr[x]++;
        nr[y]++;
    }
    dfs(1);
    sol.pop_back();
    for(int x:sol)
        out<<x<<" ";
    return 0;
}