Cod sursa(job #2103565)

Utilizator ARobertAntohi Robert ARobert Data 10 ianuarie 2018 15:02:16
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,i,x,y,gr[100001],viz[100001],l;
vector<pair<int,int>> v[100001];
vector<int> rasp;
stack<int> s;

int main()
{
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>x>>y;
        v[x].push_back(make_pair(y,i));
        v[y].push_back(make_pair(x,i));
        gr[x]++;
        gr[y]++;
    }
    for (i=1;i<=n;i++)
        if (gr[i]%2==1||gr[i]==0)
            {
                fout<<-1;
                return 0;
            }
    s.push(1);
    while (s.size()!=0)
    {
        x=s.top();
        l=v[x].size();
        if (v[i].size()!=0)
        {
            x=v[i].back().first;
            y=v[i].back().second;
            v[i].pop_back();
            if (!viz[y])
            {
                viz[y]=1;
                s.push(x);
            }
            else
            {
                s.pop();
                rasp.push_back(i);
            }
        }
    }
    for (i=0;i<rasp.size();++i)
        fout<<rasp[i]<<" ";
    return 0;
}