Cod sursa(job #1134621)

Utilizator pauldinudinu paul pauldinu Data 6 martie 2014 19:55:41
Problema Ciclu Eulerian Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int N=100001;
struct muchii {
    int x,y;
} v[N*5];
int n,m;

vector <int> a[N];
bool folosit[5*N],viz[N];
void citire() {
    f>>n>>m;
    for(int i=1; i<=m; i++) {
        f>>v[i].x>>v[i].y;
        a[v[i].x].push_back(i);
        a[v[i].y].push_back(i);
    }
}
void euler(int x) {
    int y,ind;
    for(int i=0; i<a[x].size(); i++) {
        ind=a[x][i];
        if(folosit[ind]) continue;
        y=v[ind].y;
        if(y==x) y=v[ind].x;
        folosit[ind] = true;
        euler(y);
    }
    g<<x<<" ";
}
bool pare()
{
    for(int i=1;i<=n;i++)
        if(a[i].size()%2==1) return 0;
    return 1;
}
void dfs(int x)
{
    viz[x]=true;
    for(int i=0;i<a[x].size();i++)
    {
        if(!viz[a[x][i]]) dfs(a[x][i]);
    }
}
bool conex()
{
     for(int i=1;i<=n;i++)
        if(viz[i]==false) return 0;
     return 1;
}
int main() {
    int ok=1;
    citire();
    dfs(1);
    if (conex() && pare())
        ok = 1;
    else
        ok = 0;
    if(ok==1) euler(1);
    else g << "-1";
    return 0;
}