Cod sursa(job #3257773)

Utilizator paull122Paul Ion paull122 Data 19 noiembrie 2024 15:02:17
Problema Ciclu Eulerian Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

#define VMAX 100000
#define NMAX 7500
#define LOG 17

#define INF (long long)(1e9)
#define MOD 1999999973
#define BASE 23

#define ll  long long int


using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

vector<pair<int,int>> adj[100005+1];
bool vis[500005+1];
vector<int> eulerCycle;
void dfs(int x)
{

    while(!adj[x].empty())
    {
        int y = adj[x].back().first;
        int id = adj[x].back().second;
        adj[x].pop_back();
        if(!vis[id])
        {
            vis[id]=1;
            dfs(y);
        }
    }
    eulerCycle.push_back(x);
}
void conex(int x)
{
    vis[x]=1;
    for(auto e : adj[x])
    {
        if(!vis[e.first])
        {
            conex(e.first);
        }
    }
}
int deg[NMAX+1];
int main()
{
    int n,m;
    fin >> n >> m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fin >> x >> y;
        deg[x]++;
        deg[y]++;
        adj[x].push_back({y,i});
        adj[y].push_back({x,i});
    }
    conex(1);
    bool ok=1;
    for(int i=1;i<=n;i++)
    {
        ok &= deg[i]%2==0;
        ok &= vis[i];
    }
    if(!ok)
    {
        fout << -1;
        return 0;
    }
    memset(vis,0,sizeof(vis));
    dfs(1);
    for(int i=0;i<eulerCycle.size()-1;i++)
    {
        fout << eulerCycle[i] << " ";
    }
}