Cod sursa(job #3003804)

Utilizator rARES_4Popa Rares rARES_4 Data 15 martie 2023 22:41:27
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int>adiacenta[100001];
int n,m;
bool viz[500001];
stack<int>st;
vector<int>rasp;
int grad[100001];
pair<int,int>muchii[500001];
int main()
{
   f >> n >> m;
   for(int i =1;i<=m;i++)
   {
       int x,y;
       f >> x >> y;
       adiacenta[x].push_back(i);
       adiacenta[y].push_back(i);
       muchii[i] = {x,y};
       grad[x]++;
       grad[y]++;
   }

    for(int i =1;i<=n;i++)
    {
        if(grad[i]%2==1)
        {
            g << -1;
            return 0;
        }
    }
    st.push(1);
    while(!st.empty())
    {
        int curent = st.top();
        if(adiacenta[curent].size()==0)
        {
            st.pop();
            rasp.push_back(curent);
            continue;
        }
        if(viz[adiacenta[curent].back()])
            {
                adiacenta[curent].pop_back();
                continue;
            }
        if(!viz[adiacenta[curent].back()])
        {
            pair<int,int> grup = muchii[adiacenta[curent].back()];
            viz[adiacenta[curent].back()] = 1;
            adiacenta[curent].pop_back();
            if(grup.first == curent)
            {
                st.push(grup.second);
            }
            else
            {
                st.push(grup.first);
            }
        }

    }
    for(int i =0;i<rasp.size()-1;i++)
        g << rasp[i]<< " ";
}