Cod sursa(job #2103570)

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

using namespace std;

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

int n,m,i,x,y,gr[100001],l;
vector<pair<int,int>> v[1000001];
vector<int> rasp;
stack<int> s;
bool viz[1000001];
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;
            }
    stack<int> s;
    s.push(1);
    while(s.size()){
        i= s.top();
        if(v[i].size()){
            x = v[i].back().first;
            y = v[i].back().second;
            v[i].pop_back();
            if(!viz[y]){
                viz[y] = true;
                s.push(x);
            }
        }else{
            s.pop();
            rasp.push_back(i);
        }
    }
    for (i=0;i<rasp.size();++i)
        fout<<rasp[i]<<" ";
    return 0;
}