Cod sursa(job #1729758)

Utilizator ValentinSavoiuFMI Savoiu Valentin-Marian ValentinSavoiu Data 15 iulie 2016 16:16:35
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
#define NN 100001
#define MM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n1[MM],n2[MM],n,m,i,x,y,l[NN];
bool viz[MM];
vector <int> lm[NN],sol;
void Euler(int nod)
{
    int i;
    for(i=0;i<lm[nod].size();i++)
    {
        if(!viz[lm[nod][i]])
        {
            viz[lm[nod][i]]=true;
            Euler(n1[lm[nod][i]]+n2[lm[nod][i]]-nod);
        }
    }
    sol.push_back(nod);
}
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>n1[i]>>n2[i];
        lm[n1[i]].push_back(i);
        lm[n2[i]].push_back(i);
        l[n1[i]]++;
        l[n2[i]]++;
    }
    for(i=1;i<=n;i++)
        if(l[i]%2) {g<<-1; return 0;}
    Euler(1);
    for(i=1;i<=m;i++) if(viz[i]==0) {g<<-1; return 0;}
    for(i=0;i<sol.size()-1;i++) g<<sol[i]<<' ';
    return 0;
}