Cod sursa(job #2967518)

Utilizator Utucora2017Nicolae Utucora2017 Data 19 ianuarie 2023 18:42:01
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector<pair<int,int> > a[100001];
int nrmuchii,nrsol,dr;
int viz[500001],sol[100001],grad[100001],parcurs[100001];
int stiva[500001];
 int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        a[x].push_back(make_pair(y,i));
        a[y].push_back(make_pair(x,i));
        grad[x]++;
        grad[y]++;
    }
    dr=0;
    for(int ii=1;ii<=n;ii++){

        if(grad[ii]>0){
            stiva[++dr]=ii;
            break;
        }
    }
        while(dr){
            int nod=stiva[dr];
            if(grad[nod]>0){
                for(;parcurs[nod]<=a[nod].size();parcurs[nod]++){
                    if(!viz[a[nod][parcurs[nod]].second]){
                        viz[a[nod][parcurs[nod]].second]=1;
                        grad[nod]--;
                        grad[a[nod][parcurs[nod]].first]--;
                        stiva[++dr]=a[nod][parcurs[nod]].first;
                        break;
                    }
                }
            }
            else{
                sol[++nrsol]=stiva[dr];
                dr--;
            }
        }
    if(nrsol==m+1){
        for(int i=1;i<nrsol;i++)
            cout<<sol[i]<<" ";
    }
    else
        cout<<-1;
 }