Cod sursa(job #2155389)

Utilizator victorobamavictor olaru victorobama Data 7 martie 2018 20:25:10
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include<stack>
#include<vector>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n,m,x,y,ok,i;

bool viz[500010];



stack  <int > q;

vector <int> sol;

vector <pair  < int,int > > v[500010];
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        v[x].push_back({y,i});
        v[y].push_back({x,i});
    }
    for(i=1;i<=n;i++)
    {
        if(!v[i].size() || v[i].size() %2 == 1 ){ok=0;break;}
    }
    if(ok) g<< -1 << '\n';
    else
    {
    q.push(1);
    while(!q.empty())
    {
        int nod = q.top();
        if(v[nod].empty())
        {
            q.pop();
            sol.push_back(nod);
        }
        else
        {
            int x,y;
            x=v[nod].back().first;
            y=v[nod].back().second;
            v[nod].pop_back();
            if(!viz[y])
            {
                viz[y]=1;
                q.push(x);
            }


        }
    }
     for(i=0;i<m;i++)
        g<<sol[i]<<' ';

    }
    f.close();g.close();
    return 0;
}