Cod sursa(job #2442134)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 22 iulie 2019 21:50:34
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> G[100005];
struct ciclu_eulerian
{
    int u , v;
};
ciclu_eulerian temp;
vector <ciclu_eulerian> ans;
void euler(int u)
{
    int j , v;
    for(j = 0 ; j < G[u].size() ; j ++)
    {
        v = G[u][j];
        temp.u = u;
        temp.v = v;
        ans.push_back(temp);
        G[u].erase(G[u].begin() + j);
        G[v].erase(find(G[v].begin() , G[v].end() , u));
        euler(v);
    }
}
int main()
{
    freopen("ciclueuler.in" , "r" , stdin);
    freopen("ciclueuler.out" , "w" , stdout);
    int n , m , i , j , ok , u , v;
    scanf("%d%d" , &n , &m);
    for(i = 1 ; i <= m ; i ++)
    {
        scanf("%d%d" , &u , &v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    ok = 1;
    for(i = 1 ; i <= n  && ok == 1 ; i ++)
        if(G[i].size() % 2 == 1)
            ok = -1;
    if(ok == -1)
        printf("-1\n");
    else
    {
        euler(1);
        for(i = 0 ; i < ans.size() ; i ++)
            printf("%d %d " , ans[i].u , ans[i].v);
    }
    return 0;
}