Cod sursa(job #1398151)

Utilizator retrogradLucian Bicsi retrograd Data 24 martie 2015 00:39:51
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
#include<vector>
#include<stack>

using namespace std;
typedef int var;

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

struct Edge {
    var n, i;
    Edge(var a, var b) {
        n = a;
        i = b;
    }
};

#define MAXN 200001
#define MAXM 500001
vector<Edge> G[MAXN];
vector<bool> TAKEN(1);
var n, m;


int main() {

    var a, b;

    fin>>n>>m;
    for(var i=1; i<=m; i++) {
        fin>>a>>b;
        TAKEN.push_back(0);
        G[a].push_back(Edge(b, i));
        G[b].push_back(Edge(a, i));
    }

    stack<var> ST;

    ST.push(1);
    while(!ST.empty()) {
        var node = ST.top();
        while(!G[node].empty() && TAKEN[G[node].back().i])
            G[node].pop_back();

        if(G[node].empty()) {
            fout<<node<<" ";
            ST.pop();
        } else {
            ST.push(G[node].back().n);
            TAKEN[G[node].back().i] = 1;
            G[node].pop_back();
        }
    }

    fout.seekp(fout.tellp() - 2);
    fout<<"\n";


    return 0;
}