Cod sursa(job #3271885)

Utilizator RaduCalisovCalisovRadu RaduCalisov Data 27 ianuarie 2025 17:56:10
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int f[100005];
deque <int> q;
vector<int> vis;
 vector<vector<pair<int,int>>> v;
void euler(int nod){
    while(v[nod].size()){
        int nxt = v[nod].back().first;
        int edge= v[nod].back().second;
        v[nod].pop_back();
        if(vis[edge]==0){
            vis[edge] = 1;
            euler(nxt);
        }
    }
    q.push_back(nod);
}
int main() {
    int n,m,cnt=0,pare=0;
    in>>n>>m;
   v.resize(n+1);
   vis.resize(m+1);
    for(int i=1;i<=m;i++){
        int x,y;
        in>>x>>y;

        v[x].push_back({y,i});
        v[y].push_back({x,i});
        if(f[y]==0)
        cnt++;
        if(f[x]==0)
        cnt++;

        f[y]++;
        f[x]++;
        
    }
    for(int i=1;i<=n;i++){
        if(f[i]%2==0)
        pare++;
    }
    if(pare==n and cnt==n){
        euler(1);
        q.pop_back();
        while(!q.empty()){
            out<<q.front()<<" ";
            q.pop_front();
        }
    }else
    out<<-1;
}