Cod sursa(job #2312804)

Utilizator filicriFilip Crisan filicri Data 5 ianuarie 2019 15:47:09
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>
#include <queue>
#define lim 500004
#define f first
#define s second
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,u,v,viz[lim],nodes[lim],k;
vector <pair <int,int> > G[lim];
queue <int> q;
void euler (int nod)
{
    while (G[nod].size())
    {
        int x=G[nod].back().f,y=G[nod].back().s;
        G[nod].pop_back();
        if (viz[y]==0)
        {
            viz[y]=1;
            euler(x);
        }
    }
    k++;
    nodes[k]=nod;
}
int main()
{
    f>>n>>m;
    for (int i=1;i<=m;i++)
    {
        f>>u>>v;
        G[u].push_back({v,i});
        G[v].push_back({u,i});
    }
    for (int i=1;i<=n;i++)                      // un graf Eulerian trebuie sa aiba toate nodurile cu grad par
        if (G[i].size()%2==1)
        {
            g<<-1;
            return 0;
        }
    euler(1);
    for (int i=1;i<=k;i++) g<<nodes[i]<<' ';
    f.close();
    g.close();
    return 0;
}