Cod sursa(job #3004692)

Utilizator MateiCatalinUrsache Matei MateiCatalin Data 16 martie 2023 15:38:55
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <stack>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n,m;
int grad[100001];

stack <int> S;
vector <int> lista[100001];

struct muchie{
    int x,y;
    bool used;
}M[500001];


void euler()
{
    while(!S.empty())
    {
        int nod=S.top();
        if(grad[nod]==0)
        {
            g<<nod<<" ";
            S.pop();
        }
        else
        {
            auto it=lista[nod].back();
            if(M[it].used==false)
            {
                grad[M[it].x]--;
                grad[M[it].y]--;
                M[it].used=true;
                S.push(M[it].x+M[it].y-nod);
            }
            lista[nod].pop_back();
        }
    }
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        grad[x]++;
        grad[y]++;
        lista[x].push_back(i);
        lista[y].push_back(i);
        M[i].x=x;
        M[i].y=y;
        M[i].used=false;
    }
    S.push(1);
    int s=0;
    for(int i=1;i<=n;i++)
    {
        if(grad[i]%2==1)
            s=1;
    }
    if(s==1)
        g<<-1;
    else
        euler();
    return 0;
}