Cod sursa(job #2492792)

Utilizator vladcainamisirVlad Cainamisir vladcainamisir Data 15 noiembrie 2019 11:55:33
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include<cstdio>
#include<vector>
const int MMAX = 500000;
const int NMAX = 100000;
struct muchie
{
    int x , y;
    bool exist;
};
muchie muchii[2 * MMAX + 1];
bool viz[NMAX + 1];
int total = 0;
std :: vector<int>v[NMAX + 1];
std :: vector<int>q;
void dfs(int nod)
{
    if(viz[nod] == 0){
        viz[nod] = 1;
        total ++;
    }
    for(int i = 0; i < v[nod].size() ; i ++)
    {
        if(muchii[  v[nod][i]  ].exist == 1)
        {
            muchii[ v[nod][i]  ].exist = 0;
            if(muchii[ v[nod][i] ].x == nod)
            dfs(muchii[ v[nod][i] ].y);
            else
            dfs(muchii[ v[nod][i] ].x);
        }
    }
    q.push_back(nod);
}
int main()
{
    int n , m , x , y , k = 0;
    freopen("ciclueuler.in" , "r" , stdin);
    freopen("ciclueuler.out" , "w" , stdout);
    scanf("%d%d" , &n , &m);
    for(int i = 1; i <= m ; i ++)
    {
        scanf("%d%d" , &x , &y);
        muchii[++k] = {x , y , 1};
        v[x].push_back(k);
        v[y].push_back(k);
    }
    dfs(1);
    if(total != n){
        printf("-1");
        return 0;
    }
    for(int i = m  ; i > 0 ; i --)
    {
        printf("%d " , q[i]);
    }
    return 0;
}