Cod sursa(job #2243461)

Utilizator AndreiVisoiuAndrei Visoiu AndreiVisoiu Data 20 septembrie 2018 16:43:16
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;

const int MMAX = 500001,
          NMAX = 100001;

int N, M;

struct muchie {
    int from, to;
    bool used = 0;
};
muchie V[MMAX];
stack<int> S;
vector<int> A[NMAX];
int L[MMAX+2],
    K;

void euler() {

}
int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);

    scanf("%i %i", &N, &M);
    int x, y;
    for(int i = 1; i <= M && scanf("%i %i", &x,&y); i++) {
        V[i].from = x;
        V[i].to = y;
        A[x].push_back(i);
        A[y].push_back(i);
    }

    S.push(1);
    while(!S.empty()) {
        int nd = S.top();
        if(!A[nd].empty()) {
            x = A[nd].back();
            A[nd].pop_back();
            if(!V[x].used) {
                V[x].used = 1;
                S.push(V[x].from^V[x].to^nd);
            }
        } else L[++K] = nd, S.pop();
    }

    for(int i = 1; i < K; i++)
        printf("%i ", L[i]);
    return 0;
}