Cod sursa(job #3268768)

Utilizator vladorovOroviceanu Vlad vladorov Data 17 ianuarie 2025 08:07:07
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct muchie{
    int start, end;
};

int grad[100005];

muchie muchii[100005];

vector<int> adj[100005];

vector<int> ciclu;

bool viz[100005];
void ciclu_euler(int start){
    if(grad[start]!=0){
        for(auto edge : adj[start]){
            if(viz[edge]) continue;

            viz[edge]=true;

            int next=(muchii[edge].end==start) ? muchii[edge].start : muchii[edge].end;

            grad[start]--; grad[next]--;

            ciclu_euler(next);
        }
    }

    ciclu.push_back(start);
}

int main(){
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");

    int n, m; fin>>n>>m;

    for(int i=0; i<m; i++){
        int x, y; fin>>x>>y;

        muchii[i]={x, y};

        adj[x].push_back(i);
        adj[y].push_back(i);

        grad[x]++;
        grad[y]++;
    }

    for(int i=1; i<=n; i++){
        if(grad[i]%2==1){
            fout<<-1;
            return 0;
        }
    }

    ciclu_euler(1);

    for(int i=0; i<m; i++){
        fout<<ciclu[i]<<" ";
    }

    return 0;
}