Cod sursa(job #2999679)

Utilizator Utucora2017Nicolae Utucora2017 Data 11 martie 2023 11:58:39
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct muchie{
    int x,y;
    bool viz;
}muchii[500005];
int n,m;
vector<int> a[100001];
int st[500005],sol[500005];
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int xx,yy;
        cin>>xx>>yy;
        muchii[i]={xx,yy};
        a[xx].push_back(i);
        a[yy].push_back(i);
    }
    for(int i=1;i<=n;i++){
        if(a[i].size()%2!=0){
            cout<<-1;
            return 0;
        }
    }
    int k=0,nr=0;
    st[++k]=1;
    while(k>0){
        int nod=st[k];
        int ok=0;
        while(!a[nod].empty()){
            int mch=a[nod].back();
            a[nod].pop_back();
            if(muchii[mch].viz==0){
                int vecin;
                if(muchii[mch].x!=nod)
                    vecin=muchii[mch].x;
                else
                    vecin=muchii[mch].y;
                st[++k]=vecin;
                muchii[mch].viz=1;
                ok=1;
                break;
            }

        }
        if(!ok)
            sol[++nr]=nod,k--;
    }
    if(nr!=m+1){
        cout<<-1;
        return 0;
    }
    for(int i=1;i<nr;i++)
        cout<<sol[i]<<" ";
}